gpt4 book ai didi

RabbitMQ 插件用于删除重复消息

转载 作者:行者123 更新时间:2023-12-02 19:03:37 25 4
gpt4 key购买 nike

我有一个用于生成文档的 RabbitMQ 队列。基本上,每个文档都有 typestate(新建、处理、就绪),因此我使用带有路由键(如 type.state)的主题交换。每次文档更改时,我都会将带有最后文档描述的消息发送到交换,并且效果足够好。

但是有时文档可以处理两次:

  1. 用户发送新文档。因此新消息report.new被发送到exchange。
  2. 当工作人员尚未开始文档处理(队列尚未到达)时,用户更新了文档。同一文档的新消息 report.new 已发送。
  3. 现在工作人员收到第一条消息并开始工作,而文档已更改,因此这项工作完全没有意义。

现在,我只是向工作人员添加一些小代码,将消息中的 last_modified 文档键与数据库中的文档键进行比较,如果不相同,则确认消息。但我认为这不是最好的解决方案。

我的想法是将 ID 添加到消息头,并使用一些 RabbitMQ 插件,该插件将从队列中删除具有相同 ID 的旧消息。

谢谢。

附注也许另一个 MQ 引擎在这里有用?例如。也许ActiveMQ有这样的功能?

最佳答案

好吧,我读过 RabbitMQ 内部架构,发现这是不可能的。这是寻找它的人的方法。

  1. 仅在消息正文中发送文档 ID
  2. 为工作人员创建一个键值存储(我为此使用 memcached)。键是 ID 值是上次为此 ID 运行的工作程序的时间戳。
  3. 当工作进程收到消息时,它会检查消息时间戳是否大于键值存储中的时间戳。如果是,则更新存储中的时间戳并运行任务,否则跳过它。

关于RabbitMQ 插件用于删除重复消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com