如何在C#应用程序中限制来自ActiveMQ的消息量?

Toa*_*oad 5 .net c# activemq-classic message-queue nms

我在.Net程序中使用ActiveMQ,我充斥着消息事件.

简而言之,当我得到一个队列事件'onMessage(IMessage receivedMsg)'时,我将消息放入一个内部队列,X线程就是这样做的.

起初,我在创建会话时有'AcknowledgementMode.AutoAcknowledge',所以我猜测队列中的所有消息都被吸入并放入内存队列(因为崩溃,所以一切都丢失了,这是冒险的).

所以我在创建会话时使用了'AcknowledgementMode.ClientAcknowledge',当工作人员准备好了消息时,它会在消息上调用'commit()'方法.但是,仍然会从队列中删除所有消息.

如何配置它只处理X个消息或处于内部队列中,并且不是所有内容都被立即"下载"了?

flq*_*flq 3

您使用的是 .NET 4.0 吗?您可以使用 BlockingCollection 。将其设置为可能包含的最大数量。一旦线程尝试放入多余的元素,Add 操作就会阻塞,直到集合再次低于阈值。

也许这可以起到节流的作用?

Rx框架中也有一个用于节流的API,但不知道它是如何实现的。如果您将 Queue 源实现为 Observable,则您可以使用此 API,但我不知道这是否满足您的需求。