是否存在可以丢弃重复消息的企业消息队列(第一个值保留)?

Tom*_*Tom 6 messaging jms message-queue duplicate-removal

我正在寻找具有这些要求的消息队列.找不到; 也许最接近的是rabbitmq-lvc插件(但是我需要线上的第一个值来坚持并留在前面).有人会知道支持这些的技术吗?

  • 消息队列是FIFO
  • 如果重复的消息被排队,则消息队列本身拒绝或丢弃它.

例如,生产者按照以下顺序将这三个消息(每个消息具有鉴别值)放入队列中:M1(鉴别器= 7654),M2(鉴别器= 2435),M3(鉴别器= 7654).现在我希望消息队列看到M3具有与M1相同的鉴别值,从而丢弃/拒绝M3.消费者只收到:M1,M2.

谢谢汤姆

T.R*_*Rob 4

我不知道其他传输,但我知道 WebSphere MQ 不会执行此操作,并且我相信其原因的解释将广泛适用于整个类别。我会非常惊讶地发现任何消息传输实际上都提供了这一点。以下是一些原因:

  • 异步消息应该是原子的。不同的供应商对消息关联性(两个或多个消息之间的关系)做出了自己的调整,但通常应避免消息关联性。您的用例不仅需要传输来处理消息关联性,而且需要在相关消息之间的不确定间隔内执行此操作。
  • 消息有效负载是一个 blob。出于性能原因,WMQ 不会触及消息有效负载,除了压缩或代码页转换等操作。任何需要解析消息负载的事情都是 WebSphere Message Broker、DataPower 或 WebSphere ESB 的工作。我预计任何声称高性能的消息传输都会面临类似的问题,因为解析有效负载会导致更长的代码路径和非线性性能下降。消息属性是个例外,但 WMQ 仅将这些属性用于选择,我预计情况通常如此。
  • 无状态操作。作为传输,应用程序的状态可以存储在持久消息中,但传输层的状态不应依赖于跨不同工作单元的应用程序的状态。同样,当您想要将某些应用程序状态的管理委托给消息传递层时,尤其是当此类管理跨越许多工作单元时,ESB 类型的产品最适合。
  • 保证交货。WMQ 旨在永远不会丢失您的持久消息。如果应用程序明确设置过期,则消息可能会消失,因为发件人表示可以这样做。如果消息是非持久性的,它可能会消失,但只有在特殊情况下才会消失,而且同样是因为发件人表示可以这样做。您描述的用例可能会导致消息消失,不是因为发件人说没问题,甚至不是因为收件人说没问题,而是因为与一些不相关的第 3 方进行交互,而这些第三方碰巧用重复值。如果第一条消息存在无效标头或代码页问题并被回滚怎么办?如果我作为攻击者输出带有所有可能的 4 位鉴别器值的垃圾消息怎么办?

正如我所说,我不了解其他消息传递产品,因此可能有一些东西可以满足您的要求,如果是这样,我将有兴趣阅读它。然而,如果没有人回复,这篇文章可能会揭示一些原因。