进程 – AMQP延迟传递和防止重复消息

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

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

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

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

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

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

点赞