ActiveMQ:MessageConsumer的选择器进程是在代理端还是在客户端?



有人能确认一下我对还是错吗?在我看来,"选择器"操作是在MessageConsumer实现中完成的。(即所有消息仍然从Message Broker发送到MessageConsumer,然后对这些消息执行"选择器"操作)。当我们有一堆我们不感兴趣的消息(即不匹配我们的选择器)时,问题就会发生,由于预取或缓存限制,这些消息最终会填满MessageConsumer的内部队列。因此,我们将无法接收任何新消息,特别是我们对选择器感兴趣的消息。

那么,是否有一种方法可以配置AMQ以在MessageBroker端执行选择器操作?我应该开始看"拦截器"和创建自己的BrokerPlugin吗?关于如何解决这个问题有什么建议吗?

我真的很感激任何回答。

谢谢,Soonthorn a .

选择器实际上应用于代理,而不是客户端。如果您的选择器是稀疏的,并且目的地看到很多流量,则代理可能没有分页匹配选择器的消息,并且您的消费者在从目的地消费更多消息之前不会看到任何匹配。

问题在于您的broker正在使用的Destination Policy。默认情况下,代理只会为浏览器分页200条消息,以避免耗尽所有可用内存并避免影响整体性能。您可以通过activemq.xml中自己的DestinationPolicy来增加这个数字,请参阅此处的文档页。

最新更新