-
前言
本篇内容主要记录spring集成消息中间件MQ的,分队列模式queue和主题模式topic两种模式,我使用的是activeMq。网上现在主流的是rabbitMq,功能更加强大,但rabbitMq用的是Erlang语言写的,需要安装Erlang环境。如果是要用到大数据相关的,可以使用kafka,我这为了简便就用了activeMq。 -
启动activeMq
下载下activeMq之后解压缩,在bin目录下有32和64的,根据电脑位数运行,我的是64位的,运行exe文件 -
pom.xml文件引入依赖
org.apache.activemq activemq-all 5.9.0 org.apache.activemq activemq-pool 5.9.0 org.springframework spring-jms 4.0.0.RELEASE -
创建mq的xml文件application-mq.xml
mq的连接地址根据实际情况设定,用户名密码根据实际情况填写,activeMq默认的是admin/admin,假如activemq配置了连接认证,则需要用配置的认证用户登录,具体用法是在activeMq的conf文件夹下activemq.xml里添加插件
-
service发送消息
package com.djkj.demo.service.serviceImpl;import com.djkj.demo.service.AmqSenderService;import org.apache.log4j.Logger;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.stereotype.Service;import javax.annotation.Resource;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;@Service("AmqSenderService")public class AmqSenderServiceImpl implements AmqSenderService { private static final Logger logger = Logger.getLogger(AmqSenderServiceImpl.class); @Resource private JmsTemplate jmsTemplate; @Resource(name = "destinationQueue") private Destination destination; @Override public void sendMsg(String msg) { logger.info("----发送队列信息开始----"); try { jmsTemplate.send(destination, new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { return session.createTextMessage(msg); } }); }catch (Exception e){ e.printStackTrace(); logger.error("发送队列失败!"); } }}
controller调用service方法发送消息
-
接收消息
我是把消息生产者和消费者放在一起的,实际开发中消费者和生产者绝大多数情况是分开在不同系统的。消费者主要通过监听来实现接收消息上面的mq的xml文件最底下配置了一个我的消息监听器MyMessageListener,代码如下package com.djkj.demo.common;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;public class MyMessageListener implements MessageListener { @Override public void onMessage(Message message) { if (message instanceof TextMessage) { try { TextMessage txtMsg = (TextMessage) message; String msg = txtMsg.getText(); WebSocketUtil.sendMessageAll(msg); } catch (JMSException e) { throw new RuntimeException(e); } } else { throw new IllegalArgumentException("Message must be of type TextMessage"); } }}
接收到消息后通过websocket发送到前台页面实现实时的效果的,大家根据自己的需求来写。以后再写关于websocket的集成。