activeMQ与Spring的整合

原文链接: http://www.cnblogs.com/bkxyq/p/9548678.html

注  所使用的所有activemq端口均为默认端口(无修改)

activeMQ与Spring的整合依赖的jar

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.9.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.9.0</version>
        </dependency>

消息发送端的配置

在spring的配置文件中加上如下的配置

 1 <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
 2           destroy-method="stop">
 3         <property name="connectionFactory">
 4             <bean class="org.apache.activemq.ActiveMQConnectionFactory">
 5                 <property name="brokerURL">
 6                     <value>tcp://localhost:61616</value>
 7                 </property>
 8             </bean>
 9         </property>
10         <property name="maxConnections" value="100"></property>
11     </bean>
12 
13     <!--使用缓存可以提升效率-->
14     <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
15         <property name="targetConnectionFactory" ref="jmsFactory"/>
16         <property name="sessionCacheSize" value="1"/>
17     </bean>
18 
19     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
20         <property name="connectionFactory" ref="cachingConnectionFactory"/>
21         <property name="messageConverter">
22             <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
23         </property>
24     </bean>
25 
26     <!--测试Queue,队列的名字是spring-queue-->
27     <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
28         <!--<constructor-arg index="0" value="spring-queue"/>-->
29         <constructor-arg name="name" value="spring-queue"/>
30     </bean>
31 
32     <!--测试Topic-->
33     <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
34         <constructor-arg index="0" value="spring-topic"/>
35     </bean>
点对点消息发送端配置

点对点的发送端

 1 import javax.annotation.Resource;
 2 import javax.jms.Destination;
 3 import javax.jms.JMSException;
 4 import javax.jms.Message;
 5 import javax.jms.Session;
 6 
 7 import org.slf4j.Logger;
 8 import org.slf4j.LoggerFactory;
 9 import org.springframework.jms.core.JmsTemplate;
10 import org.springframework.jms.core.MessageCreator;
11 import org.springframework.stereotype.Service;
12 
13 import com.alibaba.fastjson.JSON;
14 import com.spr.plat.modules.jysb.retentionaward.entity.RetentionAwardUser;
15 
16 @Service
17 public class AMQSenderServiceImpl {
18     private static final Logger logger = LoggerFactory.getLogger(AMQSenderServiceImpl.class);
19 
20      @Resource(name = "jmsTemplate")
21     private JmsTemplate jmsTemplate;
22 
23     //目的地队列的明证,我们要向这个队列发送消息
24     @Resource(name = "destinationQueue")
25     private Destination destination;
26 
27     //向特定的队列发送消息   (RetentionAwardUser 自定义java对象)
28     public void sendMsg(RetentionAwardUser v_RAU) {
29         String msg = JSON.toJSONString(v_RAU);
30         try {
31             logger.info("将要向队列{}发送的消息msg:{}", destination, msg); 
32             jmsTemplate.send(destination, new MessageCreator() {
33                 @Override
34                 public Message createMessage(Session session) throws JMSException {
35                     return session.createTextMessage(msg);
36                 }
37             });
38         } catch (Exception ex) {
39             ex.printStackTrace();
40             logger.error("向队列{}发送消息失败,消息为:{}", destination, msg);
41         }
42     }
43 }
点对点的发送端代码

消息接收端的配置

1 <bean id="jmsContainer"
2           class="org.springframework.jms.listener.DefaultMessageListenerContainer">
3         <property name="connectionFactory" ref="cachingConnectionFactory"/>
4         <property name="destination" ref="destinationQueue"/>
5         <property name="messageListener" ref="messageListener"/>
6 </bean>
消息接收端的配置

点对点的接收端

 1 import javax.jms.JMSException;
 2 import javax.jms.Message;
 3 import javax.jms.MessageListener;
 4 import javax.jms.TextMessage;
 5 
 6 
 7 /**
 8  * MQ 消息监听器
 9  * 
10  * @author     *****
11  * 
12  * @date    2018-8-28 14:08:30
13  *
14  */
15 public class MQMessageListener implements MessageListener{
16 
17     
18     /**
19      * 消息监听器
20      * @author    *****
21      * @date    2018-8-28 14:13:00
22      * @version    1.0
23      */
24     @Override
25     public void onMessage(Message msg) {
26         if (msg instanceof TextMessage) {
27             try {
28                 String message = ((TextMessage)msg).getText();
29                 System.err.println("\r\n 接收到的MQ消息:");
30                 System.err.println(message);
31             } catch (JMSException e) {
32                 e.printStackTrace();
33             }
34         } else {
35             throw new IllegalArgumentException("Message must be of type TextMessage");
36         }
37     }
38 
39 }
点对点的接收端

最后在spring配置文件中加上如下配置

 <bean id="messageListener" class="com.spr.plat.modules.jysb.retentionaward.service.MQMessageListener"></bean>

转载于:https://www.cnblogs.com/bkxyq/p/9548678.html

猜你喜欢

转载自blog.csdn.net/weixin_30256901/article/details/94789602
今日推荐