Spring boot 在同一SpringBoot应用程序中的MQTT接收器中未接收到使用JMS producer发送的消息
我刚刚开始使用ActiveMQ Artemis,并在我的机器上安装了Artemis 2.17.0。创建了SpringBoot测试应用程序,其中存在JMS和MQTT发布者和接收者。还创建了小型RestController,这样我就可以使用JMS和MQTT生产者发送消息。接收器非常简单,只需创建一条日志消息到控制台。现在,当我使用MQTT生产者创建消息时,JMS和MQTT接收器都会将消息获取并记录到控制台。但当我使用JMS生产者发送消息时,消息只在JMS接收器中接收,而在控制台中没有MQTT消息。试了好几次。实现还可以,我认为MQTT生产者示例运行良好。以这种方式在Artemis协议之间路由消息是否有任何限制?或者是什么样的问题Spring boot 在同一SpringBoot应用程序中的MQTT接收器中未接收到使用JMS producer发送的消息,spring-boot,activemq-artemis,Spring Boot,Activemq Artemis,我刚刚开始使用ActiveMQ Artemis,并在我的机器上安装了Artemis 2.17.0。创建了SpringBoot测试应用程序,其中存在JMS和MQTT发布者和接收者。还创建了小型RestController,这样我就可以使用JMS和MQTT生产者发送消息。接收器非常简单,只需创建一条日志消息到控制台。现在,当我使用MQTT生产者创建消息时,JMS和MQTT接收器都会将消息获取并记录到控制台。但当我使用JMS生产者发送消息时,消息只在JMS接收器中接收,而在控制台中没有MQTT消息。试
- 有关JMS实现的代码信息:
- 有关MQTT实现的代码信息:
应用程序.properties
为发布订阅模式集spring.jms.pub sub-domain=true
配置JmsTemplate,或将JmsTemplatepubSubDomain
设置为true
,即:
jmsTemplate.setPubSubDomain(true);
@Bean
public JmsListenerContainerFactory<?> topicConnectionFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
@JmsListener(destination = "${prices.mqtt.east}", containerFactory = "topicConnectionFactory")
public void receiveFromTopic(String message) {
...
}
要通过启动的应用程序.properties
为发布订阅模式集spring.jms.pub sub-domain=true
配置JmsListener,或将JmsListenerContainerFactorypubSubDomain
设置为true
,即:
jmsTemplate.setPubSubDomain(true);
@Bean
public JmsListenerContainerFactory<?> topicConnectionFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
@JmsListener(destination = "${prices.mqtt.east}", containerFactory = "topicConnectionFactory")
public void receiveFromTopic(String message) {
...
}
@Bean
公共JmsListenerContainerFactory主题连接工厂(连接工厂连接工厂,默认JMSListenerContainerFactoryConfigurer配置器){
DefaultJmsListenerContainerFactory=新的DefaultJmsListenerContainerFactory();
configurer.configure(工厂、连接工厂);
factory.setPubSubDomain(true);
返回工厂;
}
@JmsListener(destination=“${prices.mqtt.east}”,containerFactory=“topicConnectionFactory”)
public void receiveFromTopic(字符串消息){
...
}
谢谢,是的,这很有效。至少部分。我设置了变量application.properties,现在MQQT正在接收JMS生成的mesage,但JMS侦听器不知道该做什么,JMS侦听器有以下注释:@JmsListener(destination=“${prices.mqtt.east}”)@DavidMarko我已经更新了我的答案,以修复Boot'a应用程序属性spring.jms.pub sub-domain
的名称,并且我添加了一个示例,如果应用程序属性不适用于您,则使用自定义JmsListenerContainerFactory创建JmsListener。此更新的spring.jms.pub sub-domain=true完成了正确的工作。现在,JMS和MQTT侦听器都获得了消息。非常感谢你的洞察力。