Apache.NMS.AMQP 设置预取大小

Apache.NMS.AMQP setting prefetch size

我正在使用 Apache.NMS.AMQP (v1.8.0) 连接到 AWS 托管的 ActiveMQ (v5.15.9) 代理,但在为 connection/consumer/destination 设置预取大小时遇到​​问题(无法设置自定义它们中任何一个的价值)。

在深入研究 source code 时,我发现默认预取值 (DEFAULT_CREDITS) 设置为 200。

为了测试这种行为,我编写了将 220 条消息排入单个队列的测试,创建两个消费者,然后使用消息。结果如预期的那样,第一个消费者出列了 200 条消息,第二个消费者出列了 20 条消息。

在那之后,我一直在寻找一种方法来为我的消费者设置预取大小,但没有成功,因为 LinkCredit 属性 of ConsumerInfo class 是只读的。

因为我的用例要求我为连接设置一个预取大小,这就是我接下来根据此 documentation page 尝试的方法,但没有成功。这是我试过的网址:

amqps://*my-broker-url*.amazonaws.com:5671?transport.prefetch=50

amqps://*my-broker-url*.amazonaws.com:5671?jms.prefetchPolicy.all=50

amqps://*my-broker-url*.amazonaws.com:5671?jms.prefetchPolicy.queuePrefetch=50

在尝试了上述所有操作后,我尝试通过附加
为我的队列目标设置预取 ?consumer.prefetchSize=50 到队列名称。结果是这样的:

queue://TestQueue?consumer.prefetchSize=50

以上所有尝试的结果都是有效预取大小 200(通过上述测试确定)。

在使用 AMQP 连接到代理时,是否有任何方法可以设置每个连接的自定义预取大小?除了通过此 documentation page?

中所述的查询参数之外,还有其他方法可以配置代理吗?

通过快速阅读代码,目前无法在 NMS.AMQP 客户端实现中设置消费者 link 信用。这似乎是需要添加的东西,因为它目前似乎只使用默认值提供给 AmqpNetLite 接收器 link 以进行自动填充。

他们的问题记者是here