我有这样的场景,我不确定Bunny是否可以支持: 我有一个定期生成消息的Producer。而且有3个消费者。因为我想模仿RPC,所以不是使用Fanout Exchange,而是我的生产者的每一轮都向DirectExchange发送三条消息,并带有相应的路由密钥。消费者将获得消息并回复临时回复队列。 所以问题是,我的消费者并不总是在线(我正在实施RAFT一致性算法)。但是,当它在网上发布之前"陈旧"生产者发送的消息刚刚通过,我的刚刚在线的消费者开始处理这么多已经无效的RPC消息,这破坏了我的应用程序逻辑。 有没有办法可以向DirectExchange发送消息,如果没有队列正在侦听路由密钥,那么消息会被丢弃?我正在考虑在发送之前制作一个时间戳并在收到时检查时间戳,但这显然不是一个好的解决方案,因为"陈旧的阈值"很难解决。 十分感谢大家!任何帮助表示赞赏。
答案 0 :(得分:1)
您可以使用message TTL。也许将TTL设置为0是你想要的。
将TTL设置为0会导致消息在到达时过期 排队,除非他们可以立即交付给消费者。
请注意,每个队列和每条消息都可以设置。我还要引用链接中的警告:
虽然消费者永远不会看到过期的消息,但只有过期的消息才会出现 到达队列的头部他们实际上会被丢弃(或 死字母)。设置每队列TTL时这不是问题, 因为过期的消息总是在队列的头部。什么时候 但是,设置每条消息的TTL,过期的消息可以排在后面 非过期的,直到后者被消费或过期。于是 此类过期消息使用的资源将不会被释放,它们也将被释放 将计入队列统计信息(例如,中的消息数) 队列)。