1. 引入开发JMS相关Jar包
compile 'org.jboss.javaee:jboss-jms-api-1.1_spec:5.0.2.GA'
我使用的是jboss-4.2.3.GA,如果启动模式是default,可以在default/deploy/jms目录下找到jbossmq-destinations-service.xml,进行相关配置,其它版本参见相应文档
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=myQueue">
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
package com.icode.jejb.message;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* Created with IntelliJ IDEA.
* User: ZhongGang
* Date: 14-6-20
* Time: 下午11:22
*/
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/myQueue")
})
public class LogMessage implements MessageListener {
@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received message: " + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
@MessageDriven注解定义类是一个消息驱动Bean, @ActivationConfigProperty定义相关的属性,基本的必要的属性要指定Destination的类型,是Topic还是Queue,Destination的名称
4. 编写发送消息的代码
package com.icode.jejb.web.servlet;
import javax.jms.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created with IntelliJ IDEA.
* User: alexz
* Date: 14-6-23
* Time: 下午3:32
* To change this template use File | Settings | File Templates.
*/
public class SendMessageServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
String message = req.getParameter("message");
InitialContext context = new InitialContext();
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) context.lookup("ConnectionFactory");
QueueConnection queueConnection = queueConnectionFactory.createQueueConnection();
QueueSession session = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) context.lookup("queue/myQueue");
TextMessage textMessage = session.createTextMessage(message);
QueueSender sender = session.createSender(queue);
sender.send(textMessage);
session.close();
queueConnection.close();
} catch (NamingException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (JMSException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
4.2 获取连接
4.3 获取队列或订阅主题
4.4 根据连接创建会话
4.5 创建消息(可以是TextMessage, ObjectMessage等)
4.6 使用会话发送消息