activeMQ代码示例

首先引入activeMQ和jms所需的jar包,本文以maven构建项目为例,需要引入以下依赖

<dependency>
    <groupId>custom</groupId>
    <artifactId>jms</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.5.0</version>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>5.7.0</version>
</dependency>
<dependency>  
    <groupId>org.springframework</groupId>  
    <artifactId>spring-jms</artifactId>  
    <version>${spring.version}</version>  
</dependency>

其中第一个jar  jms包因为maven中心只有该报的pom并没有jar,所以需要从网上下载jar包并传到nexus私服上

一、  原生代码

1. queue

 消息生产者:

 1 import javax.jms.Connection;
 2 import javax.jms.DeliveryMode;
 3 import javax.jms.JMSException;
 4 import javax.jms.MapMessage;
 5 import javax.jms.MessageProducer;
 6 import javax.jms.Queue;
 7 import javax.jms.Session;
 8 import org.apache.activemq.ActiveMQConnectionFactory;
 9 
10 public class QueuePublisher {
11     public static void main(String[] args) throws JMSException {
12         ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.1.160:61616");
13         Connection connection = factory.createConnection();
14         connection.start();
15         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
16         Queue queue = session.createQueue("Test-Queue");
17         MessageProducer producer = session.createProducer(queue);
18         producer.setDeliveryMode(DeliveryMode.PERSISTENT);
19         while (true) {
20             MapMessage message = session.createMapMessage();
21             message.setString("time", "message_" + System.currentTimeMillis());
22             producer.send(message);
23             System.out.println("Sent message: " + message.getString("time"));
24             try {
25                 Thread.sleep(1000);
26             } catch (InterruptedException e) {
27                 e.printStackTrace();
28             }
29         }
30     }
31     
32 }
View Code

 

消息消费者:

 1 import javax.jms.Connection;
 2 import javax.jms.JMSException;
 3 import javax.jms.MapMessage;
 4 import javax.jms.Message;
 5 import javax.jms.MessageConsumer;
 6 import javax.jms.MessageListener;
 7 import javax.jms.Queue;
 8 import javax.jms.Session;
 9 import org.apache.activemq.ActiveMQConnectionFactory;
10 
11 public class QueueSubscriber {
12 
13     public static void main(String[] args) {
14         ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.1.160:61616");
15         try {
16             Connection connection = factory.createConnection();
17             connection.start();
18             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
19             Queue queue = session.createQueue("Test-Queue");
20             
21             //创建消费者1
22             MessageConsumer consumer1 = session.createConsumer(queue);
23             consumer1.setMessageListener(new MessageListener() {
24                 @Override
25                 public void onMessage(Message message) {
26                     MapMessage tm = (MapMessage) message;
27                     try {
28                         System.out.println("【consumer1】Received message: " + tm.getString("time"));
29                     } catch (JMSException e) {
30                         e.printStackTrace();
31                     }
32                 }
33             });
34             
35             //创建消费者2
36             MessageConsumer consumer2 = session.createConsumer(queue);
37             consumer2.setMessageListener(new MessageListener() {
38                 @Override
39                 public void onMessage(Message message) {
40                     MapMessage tm = (MapMessage) message;
41                     try {
42                         System.out.println("【consumer1】Received message: " + tm.getString("time"));
43                     } catch (JMSException e) {
44                         e.printStackTrace();
45                     }
46                 }
47             });
48         } catch (JMSException e) {
49             e.printStackTrace();
50         }
51     }
52 
53 }
View Code

 

 先运行QueueSubscriber 让消费者开始监听,然后启动QueuePublisher 发送消息。

2. topic

消息生产者:

 1 import javax.jms.Connection;
 2 import javax.jms.JMSException;
 3 import javax.jms.MessageProducer;
 4 import javax.jms.Session;
 5 import javax.jms.TextMessage;
 6 import javax.jms.Topic;
 7 import org.apache.activemq.ActiveMQConnectionFactory;
 8 
 9 public class TopicPublisher {
10     public static void main(String[] args) throws JMSException {
11         ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.1.160:61616");
12         Connection connection = factory.createConnection();
13         connection.start();
14         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
15         Topic topic = session.createTopic("Test-topic");
16         MessageProducer producer = session.createProducer(topic);
17         while (true) {
18             TextMessage message = session.createTextMessage();
19             message.setText("message_" + System.currentTimeMillis());
20             producer.send(message);
21             System.out.println("Sent message: " + message.getText());
22             try {
23                 Thread.sleep(1000);
24             } catch (InterruptedException e) {
25                 e.printStackTrace();
26             }
27         }
28     }
29 
30 }
View Code

消息消费者:

 1 import javax.jms.Connection;
 2 import javax.jms.JMSException;
 3 import javax.jms.Message;
 4 import javax.jms.MessageConsumer;
 5 import javax.jms.MessageListener;
 6 import javax.jms.Session;
 7 import javax.jms.TextMessage;
 8 import javax.jms.Topic;
 9 import org.apache.activemq.ActiveMQConnectionFactory;
10 
11 public class TopicSubscriber {
12 
13     public static void main(String[] args) {
14         ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.1.160:61616");
15         try {
16             Connection connection = factory.createConnection();
17             connection.start();
18             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
19             Topic topic = session.createTopic("Test-topic");
20             MessageConsumer consumer1 = session.createConsumer(topic);
21             //创建消费者1
22             consumer1.setMessageListener(new MessageListener() {
23                 public void onMessage(Message message) {
24                     TextMessage tm = (TextMessage) message;
25                     try {
26                         System.out.println("【consumer1】Received message: " + tm.getText());
27                     } catch (JMSException e) {
28                         e.printStackTrace();
29                     }
30                 }
31             });
32             //创建消费者2
33             MessageConsumer consumer2 = session.createConsumer(topic);
34             consumer2.setMessageListener(new MessageListener() {
35                 @Override
36                 public void onMessage(Message message) {
37                     TextMessage tm = (TextMessage) message;
38                     try {
39                         System.out.println("【consumer2】Received message: " + tm.getText());
40                     } catch (JMSException e) {
41                         e.printStackTrace();
42                     }
43                 }
44             });
45         } catch (JMSException e) {
46             e.printStackTrace();
47         }
48     }
49 
50 }
View Code

 先运行TopicSubscriber让消费者开始监听,然后启动TopicPublisher发送消息。

二、   Spring 集成代码

1. queue

spring配置:

 1 <!-- 配置JMS连接工厂 -->    
 2     <bean id="queueConnectionFactory"    
 3         class="org.springframework.jms.connection.CachingConnectionFactory">    
 4         <!-- Session缓存数量 -->    
 5         <property name="sessionCacheSize" value="10" />    
 6         <property name="targetConnectionFactory">    
 7             <bean class="org.apache.activemq.ActiveMQConnectionFactory">    
 8                 <!-- MQ地址 -->    
 9                 <property name="brokerURL" value="tcp://192.168.1.160:61616" />    
10                  <!-- 是否异步发送 -->    
11                 <property name="useAsyncSend" value="true" />    
12             </bean>    
13         </property>    
14     </bean> 
15 
16     <bean id="queueJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
17         <property name="connectionFactory">
18             <ref local="queueConnectionFactory" />
19         </property>
20         <property name="defaultDestinationName" value="Test-queue" />
21         <!-- 是否是topic模式。如果为True,则是Topic;如果是false或者默认,则是queue-->
22         <property name="pubSubDomain" value="false" />
23     </bean>
24     
25     <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
26         <constructor-arg>
27             <value>Test-queue</value>
28         </constructor-arg>
29     </bean>
30     
31     <bean id="queueMessageListener" class="com.darvi.modules.jmsdemo.listener.QueueMessageListener" />
32     
33     <bean id="queueJmsContainer"
34         class="org.springframework.jms.listener.DefaultMessageListenerContainer">
35         <property name="connectionFactory" ref="queueConnectionFactory" />
36         <property name="destination" ref="queueDestination" />
37         <property name="messageListener" ref="queueMessageListener" />
38     </bean>
View Code

生产者代码:

 1 import javax.jms.JMSException;
 2 import javax.jms.Message;
 3 import javax.jms.Session;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.beans.factory.annotation.Qualifier;
 6 import org.springframework.jms.core.JmsTemplate;
 7 import org.springframework.jms.core.MessageCreator;
 8 import org.springframework.stereotype.Service;
 9 
10 import com.darvi.modules.jmsdemo.service.IProducerService;
11 
12 @Service(value="producerService")
13 public class ProducerServiceImpl implements IProducerService{
14     @Autowired
15     @Qualifier("queueJmsTemplate")
16     private JmsTemplate queueJmsTemplate;
17     
18     @Override
19     public void sendQueueMessage(String message) throws Exception {
20         queueJmsTemplate.send(new MessageCreator() {
21             public Message createMessage(Session session) throws JMSException {
22                 return session.createTextMessage(message);
23             }
24         });
25     }
26     
27 
28 }
View Code

消费者listener代码:

 1 import javax.jms.JMSException;
 2 import javax.jms.Message;
 3 import javax.jms.MessageListener;
 4 import javax.jms.TextMessage;
 5 
 6 public class QueueMessageListener implements MessageListener {
 7 
 8     @Override
 9     public void onMessage(Message message) {
10         TextMessage textMsg = (TextMessage) message;
11         try {
12             System.out.println("【queue】接收者受到消息:" + textMsg.getText());
13             System.out.println("【queue】开始进行解析并调用service执行....");
14         } catch (JMSException e) {
15             e.printStackTrace();
16         }
17     }
18 
19 }
View Code

2. topic

spring配置:

 1 <!-- 配置JMS连接工厂 -->    
 2     <bean id="topicConnectionFactory"    
 3         class="org.springframework.jms.connection.CachingConnectionFactory">    
 4         <!-- Session缓存数量 -->    
 5         <property name="sessionCacheSize" value="10" />    
 6         <property name="targetConnectionFactory">    
 7             <bean class="org.apache.activemq.ActiveMQConnectionFactory">    
 8                 <!-- MQ地址 -->    
 9                 <property name="brokerURL" value="tcp://192.168.1.160:61616" />    
10                  <!-- 是否异步发送 -->    
11                 <property name="useAsyncSend" value="true" />    
12             </bean>    
13         </property>    
14     </bean> 
15 
16     <bean id="topicJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
17         <property name="connectionFactory">
18             <ref local="topicConnectionFactory" />
19         </property>
20         <property name="defaultDestinationName" value="Test-topic" />
21         <!-- 是否是topic模式。如果为True,则是Topic;如果是false或者默认,则是queue-->
22         <property name="pubSubDomain" value="true" />
23     </bean>
24     
25     <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
26         <constructor-arg>
27             <value>Test-topic</value>
28         </constructor-arg>
29     </bean>
30     
31     <bean id="topicMessageListener" class="com.darvi.modules.jmsdemo.listener.TopicMessageListener" />
32     
33     <bean id="topicJmsContainer"
34         class="org.springframework.jms.listener.DefaultMessageListenerContainer">
35         <property name="connectionFactory" ref="topicConnectionFactory" />
36         <property name="destination" ref="topicDestination" />
37         <property name="messageListener" ref="topicMessageListener" />
38     </bean>
View Code

生产者代码:

 1 import javax.jms.JMSException;
 2 import javax.jms.Message;
 3 import javax.jms.Session;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.beans.factory.annotation.Qualifier;
 6 import org.springframework.jms.core.JmsTemplate;
 7 import org.springframework.jms.core.MessageCreator;
 8 import org.springframework.stereotype.Service;
 9 import com.darvi.modules.jmsdemo.service.IProducerService;
10 
11 @Service(value="producerService")
12 public class ProducerServiceImpl implements IProducerService{
13     @Autowired
14     @Qualifier("topicJmsTemplate")
15     private JmsTemplate topicJmsTemplate;
16     
17     @Override
18     public void sendTopicMessage(String message) throws Exception {
19         topicJmsTemplate.send(new MessageCreator() {
20             public Message createMessage(Session session) throws JMSException {
21                 return session.createTextMessage(message);
22             }
23         });
24     }
25 
26 }
View Code

消费者listener代码:

 1 import javax.jms.JMSException;
 2 import javax.jms.Message;
 3 import javax.jms.MessageListener;
 4 import javax.jms.TextMessage;
 5 
 6 public class TopicMessageListener implements MessageListener{
 7 
 8     @Override
 9     public void onMessage(Message message) {
10         TextMessage textMsg = (TextMessage) message;
11         try {
12             System.out.println("【topic】接收者受到消息:" + textMsg.getText());
13             System.out.println("【topic】开始进行解析并调用service执行....");
14         } catch (JMSException e) {
15             e.printStackTrace();
16         }
17     }
18 }
View Code

 

posted @ 2016-08-26 16:31  Mr。Guo  阅读(529)  评论(0编辑  收藏  举报