我们正在从Tibco迁移,开始使用ActiveMQ Artemis。 Tibco上有几种可用的ack设置,但在Artemis中我们没有找到与之类似的任何设置。我们正在使用amqpnetlite .NET库与Artemis进行交互,并且作为代码的一部分,使用DistributionMode
根据布尔值移动或复制,我们将它们分配给我们称为{{1 }}。我没有找到太多有关UseAutoAcknowledge
的文档,但是对于此处不是很清楚的文档-http://docs.oasis-open.org/amqp/core/v1.0/amqp-core-messaging-v1.0.html。
我的问题是DistributionMode
是否设置为可移动-Artemis是否向客户发送确认,而设置为复制时是否发送确认?
答案 0 :(得分:1)
我无法与Tibco交谈,但是我可以尝试解释AMQP DistributionMode
。本质上,DistributionMode
是关于接收者行为的设置-具有move
模式的接收者期望消息仅发送给接收者,而不发送给其他接收者-这是接收者的正常行为排队的消费者。具有copy
模式的接收者期望其他接收者也接收该消息(例如队列浏览器,或者-某种程度上,例如主题的订户)。在传统的Client-Broker拓扑中,DistributionMode仅在从Broker接收消息时才真正有趣,而在向Broker发送消息时不太可能起作用。
确认与DistributionMode是分开的。 AMQP具有Disposition
的概念,与“确认”相似但不相同。处置最终是发件人在消息传输完成时将应用的操作(因此与DistributionMode
交互以代理代理发送的消息)。从概念上讲,对于每个消息传输,代理可能会决定传输已成功完成;它已失败-但以某种方式重试可能会成功;它以无法重试的方式失败;或其他更微妙的结果。在这里,根据DistributionMode
是move
还是copy
的不同,Broker上的行为可能有所不同(该规范含糊其词,以实现实现的灵活性)。如果接收方要求移动消息,并且接收方声明传输不成功,则代理可能会将消息提供给所有竞争的消费者。如果接收者要求复制,则它永远不会在消息上保留排他锁,因此选择仅是是否重试将复制发送给该相同的使用者。
这也许是最简单的事情,如果您可以描述所需的行为,那么Apache Artemis的专家可以考虑是否可以实现/如何实现。