activeMQ实例在项目中的运用二【项目实战系列】
上一篇我们已经介绍了activeMQ的服务器端的开发和代码,那么这一篇就介绍一下怎么获取对应的activeMQ里面的信息,并
通过websocket推送到前端。
首先来看一下接收端项目结构:
项目结构中主要的就是listener包里面的内容,用于监听MQ中的消息,我们来看其中一个UserPushListener.java类:
- package com.lwl.activemq.listener;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import javax.jms.TextMessage;
- import org.apache.log4j.Logger;
- import org.springframework.stereotype.Component;
- import com.alibaba.fastjson.JSON;
- import com.lwl.activemq.domain.User;
- import com.lwl.activemq.controller.websocket.WebsocketController;
- @Component("userPushListener")
- public class UserPushListener implements MessageListener {
- protected static final Logger logger = Logger.getLogger(UserPushListener.class);
- @Override
- public void onMessage(Message message) {
- logger.info("[UserPushListener.onMessage]:begin onMessage.");
- TextMessage textMessage = (TextMessage) message;
- try {
- //获取数据
- String jsonStr = textMessage.getText();
- logger.info("[UserPushListener.onMessage]:receive message is,"+ jsonStr);
- if (jsonStr != null) {
- User info = JSON.parseObject(jsonStr, User.class);
- System.out.println("==============================接受到的用户信息 开始====================================");
- System.out.println(info.toString());
- System.out.println("==============================接受到的用户信息 结束====================================");
- WebsocketController.broadcast("user", jsonStr);
- }
- } catch (JMSException e) {
- logger.error("[UserPushListener.onMessage]:receive message occured an exception",e);
- }
- logger.info("[UserPushListener.onMessage]:end onMessage.");
- }
- }
还记得我们在配置服务器端使用的MQ的配置文件嘛,当然在接收端也会使用相应的配置文件:activemq_config.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jms="http://www.springframework.org/schema/jms"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">
- <!-- 内部统一使用的MQ地址 -->
- <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name="brokerURL" value="tcp://localhost:61616"/>
- </bean>
- <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
- <property name="connectionFactory" ref="targetConnectionFactory"/>
- <property name="maxConnections" value="50"/>
- </bean>
- <!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
- <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
- <property name="connectionFactory" ref="connectionFactory"/>
- </bean>
- <!-- 推送给用户信息 -->
- <bean id="userPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">
- <constructor-arg>
- <value>user.service.queue</value>
- </constructor-arg>
- </bean>
- <!-- 推送给新闻信息 -->
- <bean id="newsPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">
- <constructor-arg>
- <value>news.service.queue</value>
- </constructor-arg>
- </bean>
- <!-- 推送给客户信息 -->
- <bean id="clientPushListenerMQ" class="org.apache.activemq.command.ActiveMQQueue">
- <constructor-arg>
- <value>client.service.queue</value>
- </constructor-arg>
- </bean>
- <!-- 用户接受推送 -->
- <bean id="userPushListenerConsumer"
- class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <property name="connectionFactory" ref="connectionFactory" />
- <property name="destination" ref="userPushListenerMQ" />
- <property name="messageListener" ref="userPushListener" />
- </bean>
- <!-- 新闻接受推送 -->
- <bean id="newsPushListenerConsumer"
- class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <property name="connectionFactory" ref="connectionFactory" />
- <property name="destination" ref="newsPushListenerMQ" />
- <property name="messageListener" ref="newsPushListener" />
- </bean>
- <!-- 客户接受推送 -->
- <bean id="clientPushListenerConsumer"
- class="org.springframework.jms.listener.DefaultMessageListenerContainer">
- <property name="connectionFactory" ref="connectionFactory" />
- <property name="destination" ref="clientPushListenerMQ" />
- <property name="messageListener" ref="clientPushListener" />
- </bean>
- </beans>
好了,数据接受端已经全部搞定了,就这么简单,没什么难度的。至于通过websocket推送到前端的功能,已经在我另一篇的
文章里了:http://blog.****.net/lovelong8808/article/details/52212566 有兴趣的可以看看,这2个是同一个项目使用,重在结合
知识和运用。
ActiveMQ的相关代码也已经提交到github上,有兴趣的同学可以去看看 https://github.com/1181888200/activeMQ.git