JMS之JBOSS开发配置.docx
- 文档编号:23926846
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:15
- 大小:52.41KB
JMS之JBOSS开发配置.docx
《JMS之JBOSS开发配置.docx》由会员分享,可在线阅读,更多相关《JMS之JBOSS开发配置.docx(15页珍藏版)》请在冰豆网上搜索。
JMS之JBOSS开发配置
JMS之JBOSS开发配置
1JMS开发
JMS开发请看相关的书说明,很简单的,此处只帖一点代码即可,有机会详细写啦。
1.1消息发布者(发布-订阅)
publicclassTopicSend{
privatestaticLoggerlogger=Logger.getLogger(TopicSend.class);
privatestaticParamparam=Param.getInstance();
protectedTopicConnectionFactorytconFactory;//连接工厂
protectedTopicConnectiontcon;//连接
protectedTopicSessiontsession;//Session
protectedTopicPublishertpublisher;//发布者
protectedTopictopic;//主题
protectedMapMessagemapmsg;//消息内容
privatestaticTopicSendinstance=null;
privateTopicSend(){
}
privateTopicSend(StringtopicName){
try{
init(getInitialContext(),topicName);
}catch(JMSExceptionex){
logger.error(ex.getMessage());
}catch(NamingExceptionex){
logger.error(ex.getMessage());
}
}
/**
*获得实例
*@returnParam
*/
publicsynchronizedstaticTopicSendgetInstance(StringtopicName){
if(instance==null){
instance=newTopicSend(topicName);
}
returninstance;
}
/**
*初始化JMS
*@paramctxContext
*@paramtopicNameString
*@throwsNamingException
*@throwsJMSException
*/
publicvoidinit(Contextctx,StringtopicName)throwsNamingException,JMSException{
//连接工厂名称
tconFactory=(TopicConnectionFactory)ctx.lookup(param.getJmsFactory());
tcon=tconFactory.createTopicConnection(param.getJmsUserName(),param.getJmsPassword());
//创建一个Topic会话,并设置自动应答,非事务性
tsession=tcon.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
//得到主题
topic=(Topic)ctx.lookup(topicName);
tpublisher=tsession.createPublisher(topic);
mapmsg=tsession.createMapMessage();//建立消息
//启动连接
tcon.start();
}
/**
*关闭连接,释放资源
*@throwsJMSException
*/
publicvoidclose()throwsJMSException{
tpublisher.close();
tsession.close();
tcon.close();
}
/**
*发送消息
*@parameventlogEventLog
*/
publicvoidsendEventlog(EventLogeventlog){
if(eventlog==null)
return;
try{
mapmsg.setInt("LOGID",eventlog.getLogID());
mapmsg.setInt("POINTID",eventlog.getPointId());
mapmsg.setFloat("OUTPUT",eventlog.getOutPut());
mapmsg.setLong("OUTDATE",eventlog.getOutDate().getTime());
mapmsg.setInt("ADDRESS",eventlog.getAddress());
tpublisher.publish(mapmsg);
}catch(JMSExceptionex){
logger.error(ex.getMessage());
}
}
/**
*发送消息
*@paramlistArrayList
*/
publicvoidsendList(ArrayListlist){
if(list==null)
return;
intcount=list.size();//发送数量
for(inti=0;i sendEventlog((EventLog)list.get(i)); } } /** *初始化环境信息 *@returnInitialContext *@throwsNamingException */ protectedstaticInitialContextgetInitialContext()throwsNamingException{ Hashtableenv=newHashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,param.getJndiFactory()); env.put(Context.PROVIDER_URL,param.getJmsUrl()); env.put(Context.URL_PKG_PREFIXES,param.getJmsUrlpkgs()); returnnewInitialContext(env); } } 1.2消息订阅者 1.2.1消息监听器MapMessageListen publicclassMapMessageListenimplementsMessageListener{ privatestaticLoggerlogger=Logger.getLogger(MapMessageListen.class); privatestaticParamparam=Param.getInstance(); privateTopicSubscribertopicSubscriber; privateTopicConnectiontcon=null; privatestaticMapMessageListeninstance=null; privateMapMessageListen(){ try{ init(getInitialContext(),param.getJmsTopicName()); }catch(JMSExceptionex){ logger.error(ex.getMessage()); }catch(NamingExceptionex){ logger.error(ex.getMessage()); } } /** *获得实例 *@returnParam */ publicstaticMapMessageListengetInstance(){ if(instance==null){ instance=newMapMessageListen(); } returninstance; } /** *onMessage *消息到达时,接收消息 *@parammessageMessage *@todoImplementthisjavax.jms.MessageListenermethod */ publicvoidonMessage(Messagemessage){ MapMessagemapmsg=null; if(message==null) return; try{ if(messageinstanceofMapMessage){ mapmsg=(MapMessage)message; logger.debug(mapmsg.getInt("POINTID")+","+mapmsg.getFloat("OUTPUT")+","+DateUtil.formatDate(mapmsg.getLong("OUTDATE"))); }else{ logger.info("不是MapMessage消息,"+mapmsg.getClass().getName()); } }catch(Exceptionex){ logger.error(ex.getMessage()); } } /** *初始化环境信息 *@returnInitialContext *@throwsNamingException */ protectedstaticInitialContextgetInitialContext()throwsNamingException{ Hashtableenv=newHashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY,param.getJndiFactory()); env.put(Context.PROVIDER_URL,param.getJmsUrl()); env.put(Context.URL_PKG_PREFIXES,param.getJmsUrlpkgs()); returnnewInitialContext(env); } /** *初始化JMS *@paramctxContext *@paramtopicNameString *@throwsNamingException *@throwsJMSException */ publicvoidinit(Contextctx,StringtopicName)throwsNamingException,JMSException{ //连接工厂名称 TopicConnectionFactorytconFactory=(TopicConnectionFactory)ctx.lookup(param.getJmsFactory()); tcon=tconFactory.createTopicConnection(param.getJmsUserName(),param.getJmsPassword()); //创建一个Topic会话,并设置自动应答,非事务性 TopicSessiontsession=tcon.createTopicSession(false,Session.AUTO_ACKNOWLEDGE); //得到主题 Topictopic=(Topic)ctx.lookup(topicName); topicSubscriber=tsession.createSubscriber(topic); } publicvoidsetTopicSubscriber(TopicSubscribertopicSubscriber){ this.topicSubscriber=topicSubscriber; } publicvoidsetTcon(TopicConnectiontcon){ this.tcon=tcon; } publicTopicSubscribergetTopicSubscriber(){ returntopicSubscriber; } publicTopicConnectiongetTcon(){ returntcon; } } 1.2.2主线程 publicclassMain{ privatestaticLoggerlogger=Logger.getLogger(Main.class); publicMain(){ } /** *启动南瑞数据接收JMS消息 */ publicvoidstartNREventlog(){ MapMessageListenmaplisten=MapMessageListen.getInstance(); try{ maplisten.getTopicSubscriber().setMessageListener(maplisten); maplisten.getTcon().start(); }catch(JMSExceptionex){ logger.error(ex.getMessage()); } } publicvoidstopNREventlog(){ MapMessageListenmaplisten=MapMessageListen.getInstance(); try{ maplisten.getTcon().close(); }catch(JMSExceptionex){ logger.error(ex.getMessage()); } } /** *程序主入口 *@paramargsString[] */ publicstaticvoidmain(String[]args){ Mainm=newMain(); InputStreamReaderreader=null; try{ m.startNREventlog(); reader=newInputStreamReader(System.in); charanswer=0; System.out.println("系统已启动,输入Q退出系统。 "); while(! ((answer=='q')||(answer=='Q'))){ answer=(char)reader.read(); } m.stopNREventlog(); }catch(Exceptionex){ logger.error(ex.getMessage()); } } } 2JBOSS4.0.5配置 这里以沙蓄生产实时系统的JMS配置为例说明JMS在JBOSS4.0.5中配置。 沙蓄生产实时系统采用Publish-SubscribeMessaging(发布-订阅)消息模式,工控机接收到机组的信息后发布JMS到JBOSS服务器中,持久性消息接收者在应用服务器上接收,非持久性消息在用户终端接收消息。 如下图: 2.1配置消息发布者 消息发布者配置参考示例如下: #JMS消息配置 jmsFactory=ConnectionFactory jndiFactory=org.jnp.interfaces.NamingContextFactory jmsUrl=127.0.0.1: 1099 jmsUrlpkgs=org.jboss.naming: org.jnp.interfaces jmsUserName=nrevent jmsPassword=jxkj88 jmsTopicName=topic/eventlogTopic 2.2配置JBOSS消息主题名 在%JBOSS_HOME%\server\default\deploy\jms\jbossmq-destinations-service.xml中增加以下代码: 其中“name=eventlogTopic”定义了消息主题的名字,发布消息时,需要通过“topic/eventlogTopic”来发布主题。 2.3配置发布/订阅消息的用户信息 2.3.1添加用户 拷贝%JBOSS_HOME%\docs\examples\jms\conf\jbossmq-state.xml到%JBOSS_HOME%\server\default\conf下面,打开jbossmq-state.xml进行编辑 在 例如: 2.3.2为用户分配角色 2.3.3配置持久化订阅 在 2.3.4配置用户内存数据库 修改%JBOSS_HOME%server\default\deploy\jms\hsqldb-jdbc-state-service.xml文件 POPULATE.TABLES.03=INSERTINTOJMS_USERS(USERID,PASSWD,CLIENTID)VALUES('nrevent','jxkj88','nrControlServer') POPULATE.TABLES.04=INSERTINTOJMS_ROLES(ROLEID,USERID)VALUES('guest','nrevent') POPULATE.TABLES.05=INSERTINTOJMS_ROLES(ROLEID,USERID)VALUES('subscriber','nrevent') POPULATE.TABLES.06=INSERTINTOJMS_ROLES(ROLEID,USERID)VALUES('publisher','nrevent') POPULATE.TABLES.07=INSERTINTOJMS_ROLES(ROLEID,USERID)VALUES('durpublisher','nrevent') POPULATE.TABLES.08=INSERTINTOJMS_USERS(USERID,PASSWD)VALUES('nreventp','jxkj88') POPULATE.TABLES.09=INSERTINTOJMS_ROLES(ROLEID,USERID)VALUES('guest','nreventp') POPULATE.TABLES.10=INSERTINTOJMS_ROLES(ROLEID,USERID)VALUES('publisher','nreventp') 2.4配置持久化消息订阅者 持久化消息订阅者的配置参考如下: #JMS消息配置 jmsFactory=ConnectionFactory jndiFactory=org.jnp.interfaces.NamingContextFactory jmsUrl=127.0.0.1: 1099 jmsUrlpkgs=org.jboss.naming: org.jnp.interfaces jmsUserName=nrevent jmsPassword=jxkj88 jmsTopicName=topic/eventlogTopic durableClientName=eventlog
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JMS JBOSS 开发 配置