Spring boot 无法使用ActiveMQ同时向两个订阅服务器发布主题消息

Spring boot 无法使用ActiveMQ同时向两个订阅服务器发布主题消息,spring-boot,activemq,Spring Boot,Activemq,我已经提到了使用ActiveMQ发布主题。我创建了两个receiver micro services,用于读取主题中的消息。我还创建了rest端点来发布主题。但是,我必须执行此rest端点两次,才能为两个接收者发布消息。rest端点的第一次执行将向Receiver1发送消息 2). rest端点的第二次执行将向Receiver2发送消息 因此,两个接收者无法同时阅读主题。 这是我的代码。 PublisherApplication.java package com.springboot; //导入

我已经提到了使用ActiveMQ发布主题。我创建了两个receiver micro services,用于读取主题中的消息。我还创建了rest端点来发布主题。但是,我必须执行此rest端点两次,才能为两个接收者发布消息。rest端点的第一次执行将向Receiver1发送消息
2). rest端点的第二次执行将向Receiver2发送消息

因此,两个接收者无法同时阅读主题。
这是我的代码。

PublisherApplication.java

package com.springboot;
//导入语句
@SpringBoot应用程序
@EnableDiscoveryClient
@使能JMS
公共类发布应用程序{
@豆子
公共JmsListenerContainerFactory主题列表工厂(ConnectionFactory ConnectionFactory,
DefaultJmsListenerContainerFactoryConfigurer(配置器){
DefaultJmsListenerContainerFactory=新的DefaultJmsListenerContainerFactory();
//这为该工厂提供了所有引导的默认设置,包括消息转换器
configurer.configure(工厂、连接工厂);
//setPubSubDomain标识ActiveMQ中的主题
factory.setPubSubDomain(true);
返回工厂;
}
公共静态void main(字符串[]args){
run(PublisherApplication.class,args);
}
@豆子
公共RestTemplate RestTemplate(RestTemplateBuilder){
返回builder.build();
}
}
PublishMessage.java
[发布主题的Rest端点]

包com.springboot.controller;
//导入语句
@RestController
@请求映射(路径=“/schoolDashboard/topic”)
类发布消息{
公共静态最终字符串MAILBOX\u TOPIC=“MAILBOX.TOPIC”;
@自动连线
私有JmsTemplate JmsTemplate;
@GetMapping(path=“/sendmail”)
public void sendStudentById()引发异常{
System.out.println(“Anindya-TopicSendMessage.java::发布发送的电子邮件…”);
jmsTemplate.convertAndSend(邮箱主题,“主题-已发送电子邮件”);
}
}
接收方应用程序01
[注-Receiver01是第一个微服务]

package com.springboot;
//导入语句
@SpringBoot应用程序
@使能JMS
公共类接收方应用程序01{
@豆子
公共JmsListenerContainerFactory主题列表工厂(ConnectionFactory ConnectionFactory,
DefaultJmsListenerContainerFactoryConfigurer(配置器){
DefaultJmsListenerContainerFactory=新的DefaultJmsListenerContainerFactory();
//这为该工厂提供了所有引导的默认设置,包括消息转换器
configurer.configure(工厂、连接工厂);
//setPubSubDomain标识ActiveMQ中的主题
factory.setPubSubDomain(true);
返回工厂;
}
公共静态void main(字符串[]args){
run(ReceiverApplication01.class,args);
}
}
topicmessgereceiver01.java
[接收者01从主题中读取消息]

package com.springboot.message;
//进口声明
@组成部分
公共类TopicMessageReceiver01{
私有最终SimpleMessageConverter=新SimpleMessageConverter();
公共静态最终字符串MAILBOX\u TOPIC=“MAILBOX.TOPIC”;
@JmsListener(目的地=邮箱\主题,containerFactory=“topicListenerFactory”)
public void receiveMessage(最终消息)引发JMSException{
系统输出打印号(“接收人01”);
}
}
接收方应用程序02
[注:-Receiver02是第二个微服务]

package com.springboot;
//进口声明
@SpringBoot应用程序
@使能JMS
公共类ReaderApplication02{
@豆子
公共JmsListenerContainerFactory主题列表工厂(ConnectionFactory ConnectionFactory,
DefaultJmsListenerContainerFactoryConfigurer(配置器){
DefaultJmsListenerContainerFactory=新的DefaultJmsListenerContainerFactory();
factory.setPubSubDomain(true);
configurer.configure(工厂、连接工厂);
返回工厂;
}
公共静态void main(字符串[]args){
run(ReaderApplication02.class,args);
}
}
TopicMesssgeReceiver02
[接收者02从主题中读取消息]


包com.springboot.message;
//进口声明
@组成部分
公共类TopicMessageReceiver02{
私有最终SimpleMessageConverter=新SimpleMessageConverter();
公共静态最终字符串MAILBOX\u TOPIC=“MAILBOX.TOPIC”;
@JmsListener(目的地=邮箱\主题,containerFactory=“topicListenerFactory”)
public void receiveMessage(最终消息)引发异常{
系统输出打印号(“接收人02”);
}
}

谢谢纳文!!终于,我能做到了
我们只需要设置setPubSubDomain(true);和弹簧靴将照顾所有锅炉板代码
现在,两个接收器微服务可以同时从主题读取消息
以下是代码更改

PublishMessage.java
[发布主题的Rest端点]

包com.springboot.controller;
//导入语句
@RestController
@请求映射(路径=“/schoolDashboard/topic”)
类发布消息{
公共静态最终字符串MAILBOX\u TOPIC=“MAILBOX.TOPIC”;
@自动连线
私有JmsTemplate JmsTemplate;
@GetMapping(path=“/sendmail”)
public void sendStudentById()引发异常{
System.out.println(“Publisher::messagesent…”);
/*添加了此语句。setPubSubDomain(true)标识ActiveMQ中的主题*/
setPubSubDomain(true);
jmsTemplate.convertAndSend(邮箱主题,“主题-已发送电子邮件”);
}
}