我的两个接收器中只有一个正在从 ActiveMQ Artemis 多播队列接收消息

问题描述 投票:0回答:1

我有两个 Spring Boot 应用程序使用

JmsListener
从名为
onboard_application
的 ActiveMQ Artemis 多播队列和名为
onboard_address
的地址消费,但只有一个应用程序成功接收消息,然后该消息从队列中删除。

我的听众如下所示:

@JmsListener(destination = "onboard_address::onboard_application")
public void applicationOnboardingMessageReceiver(String message) throws JsonProcessingException {
    ApplicationDTO appDTO = objectMapper.readValue(message, ApplicationDTO.class);
    //Business logic
}

我的消息发送者看起来像:

public void sendMulticastMessage(String channel, Object payload) throws Exception {
    try {
        jmsTemplate.setPubSubDomain(true);
        jmsTemplate.convertAndSend(channel, objectMapper.writeValueAsString(payload));
    } catch (JsonProcessingException e) {
       //Take action
    } 
}

application.yml
中的配置:

spring:
 artemis:
   mode: native
   user: artemis
   password: artemis
   broker-url: tcp://localhost:61616
 jms:
   pub-sub-domain: true

您能建议我错过了什么或做错了什么吗?预先感谢。

java spring-jms activemq-artemis
1个回答
0
投票

您所观察到的是预期行为,因为 both

JmsListener
实例配置为从 single 队列使用(即
onboard_address::onboard_application
- 完全限定的队列名称)。特定队列上的所有消费者共享该队列上的消息。

如果您想要正常的多播(即发布/订阅)语义,那么您应该简单地指定 address 的名称,例如:

@JmsListener(destination = "onboard_address")

对发送消息的应用程序使用相同的值。

您可以在文档中阅读有关 ActiveMQ Artemis 地址模型的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.