发送到带有和不带有选择器的队列会创建大队列



我的系统中有两个使用者,它们来自同一个目的地,但有些消息有特定的选择器,有些则没有。因此,我看到很多消息被卡在选择器消费者中(它们与选择器不匹配(

类似的东西:

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. 添加一个具有选择器的使用者,该选择器可捕获所有"其余"消息
  2. 使用筛选的复合目的地移动到消息的服务器端筛选
  3. 添加一个基于内容的路由器(如Camel、Mule等(,为消费者将消息分类到单独的队列中,这样他们就不需要选择器了

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

最新更新