千家信息网

ActiveMQ结合Spring收发消息的方法

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本文小编为大家详细介绍"ActiveMQ结合Spring收发消息的方法",内容详细,步骤清晰,细节处理妥当,希望这篇"ActiveMQ结合Spring收发消息的方法"文章能帮助大家解决疑惑,下面跟着小
千家信息网最后更新 2026年11月03日ActiveMQ结合Spring收发消息的方法

本文小编为大家详细介绍"ActiveMQ结合Spring收发消息的方法",内容详细,步骤清晰,细节处理妥当,希望这篇"ActiveMQ结合Spring收发消息的方法"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

ActiveMQ 结合 Spring 收发消息

直接使用 ActiveMQ 的方式需要重复写很多代码,且不利于管理,Spring 提供了一种更加简便的方式——Spring JMS ,通过它可以更加方便地使用 ActiveMQ。

Maven 依赖

结合Spring使用ActiveMQ的依赖如下:

org.springframework

spring-jms

${spring.version}

org.apache.xbean

xbean-spring

3.16

org.apache.activemq

activemq-core

5.7.0

org.apache.activemq

activemq-pool

5.7.0

ActiveMQ.xml 文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:amq="http://activemq.apache.org/schema/core"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.0.xsd

http://activemq.apache.org/schema/core

http://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd">

brokerURL="tcp://localhost:61616"

userName="admin"

password="admin" />

class="org.springframework.jms.listener.DefaultMessageListenerContainer">

配置 connectionFactory

connectionFactory 是 Spring 用于创建到 JMS 服务器链接的,Spring 提供了多种 connectionFactory。

brokerURL="tcp://localhost:61616"

userName="admin"

password="admin" />

配置Queue

配置Topic

配置JMS消息模板——jmsTemplate

最后,在 applicationContext.xml 中引入配置好的 ActiveMQ.xml

1

以上就是配置文件相关的,下面是具体的业务代码。

消息生产者服务

@Service

public class ProducerService {

@Autowired

private JmsTemplate jmsTemplate;

//使用默认目的地

public void sendMessageDefault(final String msg){

Destination destination = jmsTemplate.getDefaultDestination();

System.out.println("向队列: " + destination + " 成功发送一条消息");

jmsTemplate.send(new MessageCreator() {

public Message createMessage(Session session) throws JMSException {

return session.createTextMessage(msg);

}

});

}

//可指定目的地

public void sendMessage(Destination destination,final String msg){

jmsTemplate.send(destination, new MessageCreator() {

public Message createMessage(Session session) throws JMSException {

return session.createTextMessage(msg);

}

});

}

}

消息消费者服务

@Service

public class ConsumerService {

@Autowired

private JmsTemplate jmsTemplate;

//从指定的Destination接收消息

public TextMessage recive(Destination destination){

TextMessage message = (TextMessage) jmsTemplate.receive(destination);

try {

System.out.println("从队列" + destination.toString() + "收到了消息" + message.getText());

} catch (JMSException e) {

e.printStackTrace();

}

return message;

}

//从默认的Destination接收消息

public void reciveDefault(){

Destination destination = jmsTemplate.getDefaultDestination();

jmsTemplate.setReceiveTimeout(5000);

while(true){

TextMessage message = (TextMessage) jmsTemplate.receive(destination);

try {

//这里还是同一个消费者

System.out.println("消费者 从目的地 " + destination.toString() + " 收到了消息" + message.getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

}

}

生产者

直接在 main 方法中获取 ApplicationContext 运行,便于测试。

@Component

public class MsgProducer {

@Autowired

private ProducerService producerService;

public void send(){

System.out.println("生产者开始发送消息:");

for(int i = 1; i < 11; i++){

String msg = "生产者发出的消息";

producerService.sendMessageDefault(msg + "-----" + i);

}

}

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");

MsgProducer msgProducer = context.getBean(MsgProducer.class);

msgProducer.send();

}

}

消费者

@Component

public class MsgConsumer {

@Autowired

private ConsumerService consumerService;

public void recive(){

System.out.println("消费者 1 开始接收消息:");

consumerService.reciveDefault();

}

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");

MsgConsumer msgConsumer = context.getBean(MsgConsumer.class);

msgConsumer.recive();

}

}

接下来就可以启动项目。同样是使用两种方式测试。

第一种方式——点对点(Queue)

同步的方式

先启动生产者发送10条消息, 再启动消费者,可以看到控制台显示成功收到10条消息。

异步监听的方式

通过监听器即可实现异步接收消息的效果,而不是像上面使用 while() 轮询同步的方式。

项目中一般都是使用异步监听的方式,在 A 服务中发送了一条消息,B 服务可以利用消息监听器监听,当收到消息后,进行相应的操作。

消息监听器(3种)

通过继承 JMS 中的 MessageListener 接口,实现 onMessage() 方法,就可以自定义监听器。这是最基本的监听器。(可根据业务实现自定义的功能)

另外spring也给我们提供了其他类型的消息监听器,比如 SessionAwareMessageListener,它的作用不仅可以接收消息,还可以发送一条消息通知对方表示自己收到了消息。(还有一种是 MessageListenerAdapter)

一个简单的自定义监听器如下:收到消息后打印消息

public class QueueMessageListener implements MessageListener {

public void onMessage(Message message) {

//如果有消息

TextMessage tmessage = (TextMessage) message;

try {

if(tmessage != null){

System.out.println("监听器监听消息:"+tmessage.getText());

}

} catch (JMSException e) {

e.printStackTrace();

}

}

}

在 ActiveMQ.xml 中引入消息监听器:

class="org.springframework.jms.listener.DefaultMessageListenerContainer">

可以看到,当使用消息监听器之后,每发送一条消息立马就会被监听到:

第二种方式——发布/订阅(Topic)

同步的方式

类似点对点中同步的方式,只是每个消费者都能收到生产者发出的全部消息,不再赘述。

异步监听的方式

启动两个监听器(两个消费者),对消息进行异步监听。看是否各自能收到生产者发送的消息。

可以看到,每个监听器各自都收到了生产者发送的10条消息。

读到这里,这篇"ActiveMQ结合Spring收发消息的方法"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

消息 监听 方式 监听器 消费者 生产者 消费 生产 配置 方法 服务 同步 文章 目的 目的地 队列 成功 业务 两个 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 新华互联网科技 互联网金融 金融科技 奇酷互联网科技 互联网与未来科技 互联网高科技企业 互联网 新科技 美国互联网前沿科技 四个字互联网科技公司取名 成都玖崟互联网科技有限公司乐商圈怎么样 温州喔噻互联网科技有限公司 广州慧亚互联网科技怎么样 互联网与医疗科技 消费医药和互联网科技 互联网科技人工智能实验室 山东子淼互联网科技有限公司 卡尔迅互联网科技有限公司 广州梦谷互联网科技有限公司领导 求路客互联网科技电话 互联网的黑科技实验室 什么是科技互联网 广东万易互联网科技有限公司惠州分公司 北京路客互联网科技有限公司 今日互联网科技 青岛科技大学互联网大赛研究生 崇明区互联网教育科技售后服务 广州市恰铎互联网科技有限公司 科技类公司包括互联网吗 天津腾达互联网科技有限公司 互联网科技大会大佬
0