首页 > 解决方案 > 消息同时发送两次给 AMQP 消息消费者 (ActiveMQ Artemis)

问题描述

由于其中一个依赖项的回归,我最近不得不从 WF13 回滚到 WF11。

现在我正在尝试让 AMQP 协议在 WildFly 11 的消息传递系统上工作。我正在运行具有两个节点的高可用性设置。每个节点在本地都有一个消息消费者。此消息消费者通过 AMQP1 连接。我已将io.netty依赖项添加到org/apache/activemq/artemis/protocol/amqp模块并进行了更新org/apache/qpid以使 AMQP 协议正常工作(另请参阅 WFLY-7823)。现在我的 AMQP 消息使用者工作正常,但它似乎总是准确地接收消息两次,而且它似乎甚至在同一帧中。这发生在同一个节点上(如果消息没有首先在本地处理,则另一个节点通过网桥接收消息)。因此,在一个节点和一个队列消费者上,我在同一时刻准确地接收到每条消息两次,甚至在ACK/NACK我收到的第一条消息之前发送一条消息。

我不记得在 WildFly 13 上看到过这个问题。

关于如何通过远程连接器发送消息,是否有任何已知的回归?可能是 AMQP 协议中的问题?或者它可能是与更新版本的兼容性问题qtip

标签: wildflyactivemq-artemiswildfly-11

解决方案


对于它的价值 Wildfly 只使用 ActiveMQ Artemis 来满足他们对 JMS 实现的需求(即 Java EE 的传统部分)。我认为 Wildfly 对除 JMS 之外的其他协议或 API 没有任何真正的兴趣。

我的理解是,如果您需要支持多协议消息用例,您可能应该使用独立代理。我相信这就是为什么在 Wildfly 中没有启用 Artemis 支持的其他协议(例如 AMQP、STOMP、MQTT、OpenWire)或没有关于如何启用它们的文档(除了偶尔的论坛帖子)。

还值得注意的是,Wildfly 11 中包含 Artemis 1.5.5,比最新版本(即 2.6.2)晚了 10 个左右。这些版本中的 AMQP 实现已经做了大量工作,所以我认为最好使用独立版本的 Artemis,而不是嵌入 Wildfly 中的 Artemis。


推荐阅读