代码之家  ›  专栏  ›  技术社区  ›  Vasyl Senko

使用RabbitMQ的MassTransit:消息重复数据消除

  •  2
  • Vasyl Senko  · 技术社区  · 7 年前

    我在用 MassTransit 具有 RabbitMQ 在传输层,面临着邮件重复数据消除的需求。

    如果重复的消息已经排队(即使该消息正在由使用者处理),则应跳过向队列添加新消息。例如,可以通过消息的内容来标识重复项。

    发送 DoWork1, DoWork2, DoWork3 可以并行处理,但是发送 DoWork1, DoWork2, DoWork2 -应跳过重复项,并且尽可能 DoWork1, DoWork2 已处理的相同消息可以排队,不应假定为重复消息。

    解决方案1:使用“ RabbitMQ Message Deduplication Plugin “在交换层,对我来说是理想的,但不确定这是否解决了所描述的问题。

    解决方案2:使用第三方数据存储实现自定义中间件。

    对于所描述的问题是否有更好的解决方案?

    提前谢谢你的帮助!

    1 回复  |  直到 7 年前
        1
  •  4
  •   noxdafox    7 年前

    这个 RabbitMQ deduplication plugin 就是为了这个目的而设计的。

    您可以在Exchange或队列中进行重复数据消除。主要的区别是,如果exchange以前看到过一条消息,那么它将对其进行重复数据消除,而如果队列已经包含了该消息的副本,那么它将对其进行重复数据消除。

    发布消息时,只需设置 x-deduplication-header 具有唯一标识消息的字符串的头(例如其正文的MD5哈希)。

    使用自定义中间件将允许您以自己的开发为代价获得更多的操作自由。