最近时间比较多总结下以前写的代码,
queue发送
以weblogic的JMS为例,首先需要在服务器配置一个JMS modules,然后在jms modules下面配置一个Connection Factory(连接工厂),然后在配置需要的QUEUE,这里注意JMS MODULES部署的服务器会决定连接工厂和QUEUE的部署服务器,然后建立一个jms server。
程序中就可通过下面方法获取QUEUE相关组件
public static void init(){
//定义连接工厂
JMS_FACTORY = "Connection Factory";
//获取QUEUE名称
QUEUE = "queuename";
//JMS服务器设置END
try{
if (context == null) {
//获取服务器信息
context = new InitialContext();
}
//从服务器获取连接工厂
queueFactory = (QueueConnectionFactory) PortableRemoteObject.narrow(context.lookup(JMS_FACTORY),
QueueConnectionFactory.class);
//从连接工厂获取QUEUE连接
qcon = queueFactory.createQueueConnection();
//用QUEUE连接注册QSESSION
qsession = qcon.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
//从服务器获取QUEUE
queue = (Queue) PortableRemoteObject.narrow(context.lookup(QUEUE),Queue.class);
//在QUEUE上注册QUEUE发送器
qsender = qsession.createSender(queue);
}catch(Exception e){
e.printStackTrace();
connection = false;
}
}
这样就可以使用queue发送器发送消息了
如
ObjectMessage msgqObject;
msgqObject = qsession.createObjectMessage();
msgqObject.setObject(object);
qsender.send(msgqObject);
weblogic jms消息类型有textmessage,objectmessage等类型。
当消息发送到jms服务器后,我们可以通过部署在weblogic上的mdb自动处理这些消息,这样就实现了一些功能的异步处理。
MDB需要实现 MessageDrivenBean,和 MessageListener 两个接口
需要实现ejbcreate(),onMessage(),ejbremove()三个基本方法。初始化的东西放到ejbcreate()中执行,
接收到message后的事情放在onMessage()方法中执行,mdb销毁的时候调用ejbremove方法。
执行流程基本为mdb发布时调用ejbcreate创建一个mdb,监听它负责的queue,当queue收到消息后调用mdb的onmessage方法执行。