4

我有一个系统会偶尔生成消息,我想每 5 分钟只提交零或一条消息。如果没有生成消息,则队列使用者不会处理任何内容。如果在 5 分钟内生成了 100 条相同的消息,我只希望从队列中使用其中的一条。

我正在使用 AMQP(RabbitMQ),有没有办法在 rabbitmq 或 AMQP 协议中实现这一点?我可以检查队列的内容以确保不插入重复项吗?队列检查似乎是一个坏主意,通常不应该为消息传递系统做些什么。

如果没有队列检查,这可以用这些工具来完成吗?想到的唯一解决方案是使用第二个队列接收所有消息,然后消费者读取每条消息并将其放入内部队列中,等待 5 分钟,然后丢弃收到的任何重复消息。在延迟之后,单条消息被放到“真正的”队列中进行处理。

看起来这可能是队列系统可以处理的常见情况。有任何想法吗?

4

1 回答 1

2

处理消息状态不是 AMQP 正在处理的事情。您可以尝试在 AMQ 和代理消息中也存在的某个过程中处理状态(就像您在原始问题中所写的那样)。根据您的情况,您可能可以使用序列或更复杂的无状态重复检测方法,但 AMQP 不处理此特定用例。

唯一可以保证的是,如果多个绑定与随后传递到队列的消息匹配,则实际上只有一条消息被传递。

于 2009-08-15T11:39:44.453 回答