博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
以ActiveMQ为例JAVA消息中间件学习【2】
阅读量:4884 次
发布时间:2019-06-11

本文共 5014 字,大约阅读时间需要 16 分钟。

前言

之前我们学习了什么是消息中间件,以ActiveMQ为例做了一个最简单的消息中间件的实现。但是我们做的就只能算是个例子而已,因为在实际的项目中肯定会有spring插一脚,所以spring肯定有来管理,所以这次我们就来学习spring中如何使用ActiveMQ

 

创建消息发送者

导入依赖

junit
junit
4.12
org.springframework
spring-context
4.3.6.RELEASE
org.springframework
spring-jms
4.3.6.RELEASE
org.springframework
spring-test
4.3.6.RELEASE
org.apache.activemq
activemq-core
5.7.0
org.springframework
spring-context

 

配置spring配置文件

 

定义一个发送消息服务的接口

/** * 发送消息服务接口 */public interface IProducerService {   void sendMessage(String message);}

 

定义这个接口的实现类

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.stereotype.Service;import javax.annotation.Resource;import javax.jms.*;/** * 发送消息接口的实现 */@Service("producerService")public class ProducerServiceImpl implements IProducerService {    @Autowired    JmsTemplate jmsTemplate;    @Resource(name="queueDestination")    Destination destination;    public void sendMessage(final String message) {        jmsTemplate.send(destination, new MessageCreator() {            public Message createMessage(Session session) throws JMSException {                TextMessage textMessage = session.createTextMessage(message);                System.out.println("发送的消息是:" + textMessage.getText());                return textMessage;            }        });    }}

 

编写单元测试

import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/** * ActiveMQ单元测试 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:producer.xml"})public class IProducerServiceTest {    @Autowired    private ProducerServiceImpl producerService;    @Test    public void sendMessage() throws Exception {        producerService.sendMessage("测试");    }}

 

记得测试之前开启ActiveMQ哦

然后查看消息队列是否被创建

 

创建消息的消费者

创建监听器

import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;/** * 消息的消费者(监听器) */public class ConsumerMessageListener implements MessageListener {    public void onMessage(Message message) {        TextMessage textMessage = (TextMessage) message;        try {            System.out.println("接收到消息:" + textMessage.getText());        } catch (JMSException e) {            e.printStackTrace();        }    }}

 

创建消费者的spring配置

 

创建消费者的单元测试

import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/** * 消费者单元测试 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:consumer.xml"})public class ConsumerMessageListenerTest {    @Test    public void onMessage() throws Exception {        //让线程等待一会,如果马上结束就监听器就收不到消息了        Thread.sleep(100000);    }}

 

然后启动单元测试

接收到消息:测试

证明已经消费掉我们刚才的消息了

 

主题模式

上面是使用的队列模式,那么主题模式需要修改那些地方呢?三个地方

在队列模式的目的地下方增加主题模式目的地,注意消费者的spring配置和发送消息的配置文件都需要修改哦

修改消费者spring配置中监听容器的配置

 

修改消息发送者实现类

@Resource(name="queueDestination") Destination destination;
@Resource(name="topicDestination") Destination destination;
 

到这里所有对于主题模式的修改就可以了,然后先启动订阅者,然后在启动消息的发送者,这次我们多发一条消息试试第一个订阅者

接收到消息:测试1

接收到消息:测试2

第二个订阅者

接收到消息:测试1

接收到消息:测试2

 

总结

以上我们就基本实现了在spring下使用ActiveMQ

但是代码和配置上面当然还需要优化和提炼,还有公共的部分可以提取,然后命名修改一下,然后根据具体的业务去设计接口等。

之后我们还会再详细的说明

转载于:https://www.cnblogs.com/linkstar/p/7517388.html

你可能感兴趣的文章
spring boot + velocity中文乱码解决方式
查看>>
读罢泪两行,人生成长必须面对的10个残酷事实
查看>>
ASP 32位程序运行与64位问题:ADODB.Connection 错误 '800a0ea9' 未指定提供程序,也没有指派的默认提供程序。...
查看>>
xcode-git笔记
查看>>
TCP和UDP的优缺点及区别
查看>>
MATLAB消除曲线毛刺Outlier Detection and Removal [hampel]
查看>>
MySQL DATE_SUB() 函数
查看>>
在SSH框架下按条件分页查询
查看>>
jquery选择器
查看>>
【javascript学习——《javascript高级程序设计》笔记】DOM操作
查看>>
高效的SQL语句翻页代码
查看>>
XMLHTTP.readyState的五种状态
查看>>
百度外卖 前端面试题
查看>>
record for json formate site
查看>>
查询树形的根节点
查看>>
HDU 1272 小希的迷宫
查看>>
hdu 5412 CRB and Queries(整体二分)
查看>>
CentOS如何安装linux桌面?
查看>>
Speech and Booth Demo in Maker Faire Shenzhen 2018
查看>>
bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
查看>>