1.准备工作
1) 下载安装,启动activemq
2) 下载activemq jar包导入项目
2.消息生产者
- package com.activemq.demo1;
- import javax.jms.*;
- import org.apache.activemq.*;
- /**
- * 消息生产者,用于生成并发送消息
- */
- public class ProducerTool {
- private String user = ActiveMQConnection.DEFAULT_USER;
- private String password = ActiveMQConnection.DEFAULT_PASSWORD;
- private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
- private String subject = "TOOL.DEFAULT";
- private Destination destination = null;
- private Connection connection = null;
- private Session session = null;
- private MessageProducer producer = null;
- /**
- * 初始化
- * @throws Exception
- */
- private void initialize() throws Exception {
- ActiveMQConnectionFactory connectionFactory =
- new ActiveMQConnectionFactory(user, password, url);
- connection = connectionFactory.createConnection();
- /* 创建Session,参数解释:
- 第一个参数 是否使用事务:当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,
- 没有回应则抛出异常,消息发送程序负责处理这个错误。
- 第二个参数 消息的确认模式:
- AUTO_ACKNOWLEDGE : 指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次,
- 但传输过程中可能因为错误而丢失消息。
- CLIENT_ACKNOWLEDGE : 由消息接收者确认收到消息,通过调用消息的acknowledge()方法
- (会通知消息提供者收到了消息)
- DUPS_OK_ACKNOWLEDGE : 指定消息提供者在消息接收者没有确认发送时重新发送消息
- (这种确认模式不在乎接收者收到重复的消息)。*/
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- destination = session.createQueue(subject);
- producer = session.createProducer(destination);
- //设置是否持久化
- producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
- }
- /**
- * 发送消息
- * @param message
- * @throws Exception
- */
- public void produceMessage(String message) throws Exception {
- initialize();
- //发送TextMessage,还可发送MapMessage,ObjectMessage,StreamMessage
- TextMessage msg = session.createTextMessage(message);
- connection.start();
- System.out.println("Producer:-> send start.");
- producer.send(msg);
- System.out.println("Producer:-> send complete.");
- close();
- }
- /**
- * 关闭连接
- * @throws JMSException
- */
- public void close() throws JMSException {
- System.out.println("Producer:->Closing Connection.");
- if (producer != null)
- producer.close();
- if (session != null)
- session.close();
- if (connection != null)
- connection.close();
- }
- }
3.消息消费者
- package com.activemq.demo1;
- import javax.jms.*;
- import javax.jms.Message;
- import org.apache.activemq.*;
- /**
- * 消息消费者,用于接收消息
- */
- public class ConsumerTool implements MessageListener {
- private String user = ActiveMQConnection.DEFAULT_USER;
- private String password = ActiveMQConnection.DEFAULT_PASSWORD;
- private String url = ActiveMQConnection.DEFAULT_BROKER_URL;
- private String subject = "TOOL.DEFAULT";
- private Destination destination = null;
- private Connection connection = null;
- private Session session = null;
- private MessageConsumer consumer = null;
- /**
- * 初始化
- * @throws JMSException
- * @throws Exception
- */
- private void initialize() throws Exception {
- ActiveMQConnectionFactory connectionFactory =
- new ActiveMQConnectionFactory(user, password, url);
- connection = connectionFactory.createConnection();
- session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- destination = session.createQueue(subject);
- consumer = session.createConsumer(destination);
- }
- /**
- * 消费消息
- * @throws Exception
- */
- public void consumeMessage() throws Exception {
- initialize();
- connection.start();
- System.out.println("Consumer:->Begin listening...");
- // 开始监听
- consumer.setMessageListener(this);
- }
- /**
- * 关闭连接
- * @throws JMSException
- */
- public void close() throws JMSException {
- System.out.println("Consumer:->Closing connection");
- if (consumer != null)
- consumer.close();
- if (session != null)
- session.close();
- if (connection != null)
- connection.close();
- }
- /**
- * 消息处理函数
- */
- public void onMessage(Message message) {
- try {
- if (message instanceof TextMessage) {
- TextMessage txtMsg = (TextMessage) message;
- String msg = txtMsg.getText();
- System.out.println("Consumer:->Received textMessage: " + msg);
- } else {
- System.out.println("Consumer:->Received: " + message);
- }
- close();
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
4.测试类
- package com.activemq.demo1;
- import javax.jms.*;
- public class Test {
- /**
- * @param args
- */
- public static void main(String[] args) throws JMSException, Exception {
- ConsumerTool consumer = new ConsumerTool();
- ProducerTool producer = new ProducerTool();
- // 开始监听
- consumer.consumeMessage();
- // 延时500毫秒之后发送消息
- Thread.sleep(500);
- producer.produceMessage("Hello, world!");
- }
- }
原文地址:http://425826501.iteye.com/blog/2198115