我有一个偶尔会生成消息的系统,我想每5分钟只提交一条或一条消息。如果没有生成消息,则队列使用者不会处理任何内容。如果在5分钟内生成了一百条相同的消息,我只希望从队列中消耗其中一条消息。
我正在使用AMQP(RabbitMQ),有没有办法在rabbitmq或AMQP协议中完成这个?我可以检查队列的内容以确保我不插入副本吗?似乎队列检查是一个坏主意,通常不应该对消息传递系统做什么。
如果没有队列检查,可以使用这些工具完成吗?想到的唯一解决方案是拥有一个接收所有消息的第二个队列,然后消费者读取每个消息并将其放入内部队列,等待5分钟,并且丢弃任何接收到的重复消息。延迟之后,单个消息被放在要处理的“真实”队列中。
这似乎是一种常见的情况,队列系统可以处理。有什么想法吗?
答案 0 :(得分:2)
处理消息状态不是AMQP正在处理的事情。您可以尝试在某些进程中处理状态,该进程也存在于AMQ和代理消息上(就像您在原始问题中所写的那样)。根据您的情况,您可能会使用序列或更复杂的无状态重复检测方法,但AMQP无法处理此特定用例。
唯一可以保证的是,如果多个绑定与随后传递到队列的消息匹配,则实际只传递一条消息。