避免使用 Spring Boot 微服务实例多次监听 ActiveMQ 主题

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

我们已将 ActiveMQ 消息代理配置为 Spring Boot 项目,并且还有另一个 Spring Boot 应用程序(我们称之为

service-A
),该应用程序具有配置为使用
@JmsListener
注释侦听某些主题的侦听器。这是一个 Spring Cloud 微服务应用程序。

问题:

  • service-A
    可以运行多个实例。
  • 如果我们有 2 个实例正在运行,那么任何有关该主题的消息都会被监听两次。
  • 如何避免每次实例监听该主题?
  • 我们希望确保该主题仅被监听一次,无论
    service-A
    实例的数量如何。

是否可以以集群模式或类似模式运行微服务?我还检查了 ActiveMQ 虚拟目的地,但不太确定这是否是问题的解决方案。

我们还想到了一种方法,可以从多个实例中决定谁是领导节点,但这是最后的手段,我们正在寻找一种更干净的方法。

欢迎任何有用的指点、参考。

spring-boot microservices activemq
1个回答
1
投票

您真正想要的是 JMS 2 中添加的 共享主题订阅。不幸的是,ActiveMQ“Classic”不支持 JMS 2。但是,ActiveMQ Artemis 支持。

ActiveMQ Artemis 是 ActiveMQ 的下一代代理。它支持与 ActiveMQ“经典”相同的大部分功能(包括对 OpenWire 客户端的完全支持)以及“经典”不支持的许多其他功能(例如 JMS 2、使用复制的无共享高可用性) 最后值队列环形队列指标插件,用于与 Prometheus、重复消息检测等工具集成)。此外,ActiveMQ Artemis 构建在高性能、非阻塞核心之上,这意味着可扩展性也更好。

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