【发布时间】:2019-09-18 12:26:38
【问题描述】:
生产者每 5 秒向交换器发送一次带有路由密钥 (x) 的消息。根据路由键,发送到 2 个队列 A 和 B。从 A 消费的消费者每 5 秒需要一次,而从 B 消费的消费者在一分钟内只需要一次。
一种方法是使用队列 B 中的消息并丢弃我们不需要的消息(只考虑一分钟一次)。
在rabbitmq中还有其他更好的方法吗?
【问题讨论】:
标签: rabbitmq
生产者每 5 秒向交换器发送一次带有路由密钥 (x) 的消息。根据路由键,发送到 2 个队列 A 和 B。从 A 消费的消费者每 5 秒需要一次,而从 B 消费的消费者在一分钟内只需要一次。
一种方法是使用队列 B 中的消息并丢弃我们不需要的消息(只考虑一分钟一次)。
在rabbitmq中还有其他更好的方法吗?
【问题讨论】:
标签: rabbitmq
消费者可以保持上次消费消息的状态。当有新消息到达时,可以检查自上次消息被消费以来是否已经过了所需的时间。如果不是,他可以忽略该消息。
这是必须由消费者处理的逻辑,而不是 RabbitMQ 代理。
【讨论】:
RMQ deduplication plugin 的重复数据删除交换旨在满足此目的。
您可以指定不希望多次看到类似消息的时间,并且交易所将丢弃给定消息的任何进一步副本。消息通过x-deduplication-header 识别。
可以通过x-cache-ttl 交换参数或消息头来控制保证消息唯一的时间量。
【讨论】: