使用和不使用选择器发送到队列会创建大队列

sending to queue with and without selector creates big queue

我的系统中有 2 个消费者,它们从同一个目的地消费,但有些消息有特定的选择器,有些则没有。 结果,我看到很多消息卡在选择器消费者中(它们与选择器不匹配)

类似的东西:

consumer1: myMessageType = 'Funny'
consumer2: myMessageType = 'Sad'
consumer3: no selector defined

Message 1 : myMessageType = 'Funny'
Message 2 : myMessageType = 'Funny'
Message 3 : myMessageType = 'Sad'
Message 4 : myMessageType = 'Sad'
Message 5 : myMessageType = 'Weird'
Message 6 : myMessageType = 'Weird'

当我查看队列(hawtio 控制台)时,我看到消费者 1 和 2 在队列中有很多消息,但由于消息中缺少选择器,它们无法使用它们 这是为什么?我在滥用 amq 系统吗?

队列只能在 maxPageSize 范围内向消费者提供消息。这样做是出于性能原因——避免扫描整个数据存储以查找消息。如果消费者缺乏消息,则意味着您的消费者选择器覆盖范围存在差距。

您要么需要:

  1. 添加一个带有选择器的消费者,该选择器可以捕获所有 'rest' 条消息
  2. 移动到server-side 使用过滤的复合目标过滤邮件
  3. 添加 content-based 路由器(即 Camel、Mule 等)以将消息分类到消费者的单独队列中,这样他们就不需要选择器了。

有一个很好的例子,选项 #2 和 #3 比尝试用 #1 解决它的架构更清晰,因为它把所有关于选择器的信息放在一个地方,而不是分散在不同的地方消费者配置。