activeMQ实例在项目中的运用二【项目实战系列】

2023-10-30

 上一篇我们已经介绍了activeMQ的服务器端的开发和代码,那么这一篇就介绍一下怎么获取对应的activeMQ里面的信息,并


通过websocket推送到前端。


        首先来看一下接收端项目结构:



项目结构中主要的就是listener包里面的内容,用于监听MQ中的消息,我们来看其中一个UserPushListener.java类:

[java]  view plain  copy
  1. package com.lwl.activemq.listener;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.MessageListener;  
  6. import javax.jms.TextMessage;  
  7.   
  8. import org.apache.log4j.Logger;  
  9. import org.springframework.stereotype.Component;  
  10.   
  11. import com.alibaba.fastjson.JSON;  
  12. import com.lwl.activemq.domain.User;  
  13. import com.lwl.activemq.controller.websocket.WebsocketController;  
  14.   
  15. @Component("userPushListener")  
  16. public class UserPushListener implements MessageListener {  
  17.      protected static final Logger logger = Logger.getLogger(UserPushListener.class);  
  18.     @Override  
  19.     public void onMessage(Message message) {  
  20.          logger.info("[UserPushListener.onMessage]:begin onMessage.");  
  21.             TextMessage textMessage = (TextMessage) message;  
  22.             try {  
  23.                 //获取数据  
  24.                 String jsonStr = textMessage.getText();  
  25.                 logger.info("[UserPushListener.onMessage]:receive message is,"+ jsonStr);  
  26.                 if (jsonStr != null) {  
  27.                     User info = JSON.parseObject(jsonStr, User.class);  
  28.                     System.out.println("==============================接受到的用户信息 开始====================================");  
  29.                     System.out.println(info.toString());  
  30.                     System.out.println("==============================接受到的用户信息 结束====================================");  
  31.                     WebsocketController.broadcast("user", jsonStr);  
  32.                 }  
  33.             } catch (JMSException e) {  
  34.                 logger.error("[UserPushListener.onMessage]:receive message occured an exception",e);  
  35.             }  
  36.             logger.info("[UserPushListener.onMessage]:end onMessage.");  
  37.         }  
  38. }  
其余的2个和这个很相似,只是换了实体类的接收而已。


还记得我们在配置服务器端使用的MQ的配置文件嘛,当然在接收端也会使用相应的配置文件:activemq_config.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <beans xmlns="http://www.springframework.org/schema/beans"    
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"    
  4.     xmlns:jms="http://www.springframework.org/schema/jms"    
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  6.      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  7.      http://www.springframework.org/schema/context    
  8.      http://www.springframework.org/schema/context/spring-context-3.0.xsd    
  9.     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  10.     http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">    
  11.        
  12.     <!-- 内部统一使用的MQ地址 -->  
  13.     <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
  14.         <property name="brokerURL" value="tcp://localhost:61616"/>  
  15.     </bean>  
  16.     <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">    
  17.         <property name="connectionFactory" ref="targetConnectionFactory"/>    
  18.         <property name="maxConnections" value="50"/>  
  19.     </bean>  
  20.     <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->  
  21.     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">    
  22.         <property name="connectionFactory" ref="connectionFactory"/>  
  23.     </bean>  
  24.   
  25.    <!-- 推送给用户信息 -->  
  26.     <bean id="userPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">  
  27.         <constructor-arg>  
  28.             <value>user.service.queue</value>  
  29.         </constructor-arg>  
  30.     </bean>  
  31.     <!-- 推送给新闻信息 -->  
  32.     <bean id="newsPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">  
  33.         <constructor-arg>  
  34.             <value>news.service.queue</value>  
  35.         </constructor-arg>  
  36.     </bean>  
  37.     <!-- 推送给客户信息 -->  
  38.     <bean id="clientPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">  
  39.         <constructor-arg>  
  40.             <value>client.service.queue</value>  
  41.         </constructor-arg>  
  42.     </bean>  
  43.       
  44.     <!-- 用户接受推送 -->  
  45.     <bean id="userPushListenerConsumer"  
  46.           class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  47.         <property name="connectionFactory" ref="connectionFactory" />  
  48.         <property name="destination" ref="userPushListenerMQ" />  
  49.         <property name="messageListener" ref="userPushListener" />  
  50.     </bean>  
  51.       
  52.     <!-- 新闻接受推送 -->  
  53.     <bean id="newsPushListenerConsumer"  
  54.           class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  55.         <property name="connectionFactory" ref="connectionFactory" />  
  56.         <property name="destination" ref="newsPushListenerMQ" />  
  57.         <property name="messageListener" ref="newsPushListener" />  
  58.     </bean>  
  59.       
  60.     <!-- 客户接受推送 -->  
  61.     <bean id="clientPushListenerConsumer"  
  62.           class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  63.         <property name="connectionFactory" ref="connectionFactory" />  
  64.         <property name="destination" ref="clientPushListenerMQ" />  
  65.         <property name="messageListener" ref="clientPushListener" />  
  66.     </bean>  
  67. </beans>  

好了,数据接受端已经全部搞定了,就这么简单,没什么难度的。至于通过websocket推送到前端的功能,已经在我另一篇的


文章里了:http://blog.csdn.net/lovelong8808/article/details/52212566 有兴趣的可以看看,这2个是同一个项目使用,重在结合


知识和运用。


ActiveMQ的相关代码也已经提交到github上,有兴趣的同学可以去看看 https://github.com/1181888200/activeMQ.git

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

activeMQ实例在项目中的运用二【项目实战系列】 的相关文章

随机推荐