如何使用 AMQPNetLite 使用 .NET 客户端应用程序设置 PRE_ACKNOWLEDGE 模式

How can I setup PRE_ACKNOWLEDGE mode using .NET Client application using AMQPNetLite

我们正在使用使用 AMQPNetLite 库的 .NET 客户端连接到 ActiveMQ Artemis。我需要设置预确认模式,从文档中了解到,这可以在 broker.xml 文件中的 connector 中设置。但是,这样做没有任何区别。目前还不清楚如何从 the documentation 设置此模式。

您引用的文档适用于使用本机 "core" 协议的 ActiveMQ Artemis 客户端。它不适用于 AMQPNetLite 客户端。该客户端是在 its own separate project which has its own documentation.

中开发的

此外,就其价值而言,该文档并未描述在 broker.xml 中配置预确认。它讨论了在客户端 jndi.properties 或通过 JMS API 以编程方式配置它。无法在代理上配置预确认。

我建议你看一下 "presettled" 模式,它是一种 AMQP 语义,本质上应该等同于 ActiveMQ Artemis 中的预确认。

就 AMQP 客户端而言,PRE-ACKNOWLEDGE 模式的想法相当于创建 AMQP 接收器 link,并在 SETTLED 的附加帧中使用 snd-settle-mode,以便远程被告知它应该向您的接收器发送已经结算的交付,这表明客户不需要自己以已结算的处置进行响应,因为遥控器已经说它已经忘记了交付。

由于与 AMQPNetLite 相关,您将创建一个 ReceiverLink 并为其提供一个自定义的 Attach 对象,该对象具有您想要的结算模式配置,类似于下面的内容,但您需要根据需要进行测试和调整。

Attach attach = new Attach();
attach.SndSettleMode = SndSettleMode.SETTLED;
attach.RcvSettleMode = RcvSettleMode.FIRST;

ReceiverLink receiver = new ReceiverLink(session, address, attach, onAttached);          

有关 link establishment 和附加选项的信息可以在 AMQP 1.0 规范中找到。