RabbitMQ外卖场景下问题

我想利用RabbitMQ实现一个外卖系统 遇到了一个问题

img


如图将信息发送至骑手服务队列后 消费者在当前区域找不到空闲的骑手 无法消费 然后 这应该怎么实现等待至有骑手再消费又不会影响其他可以被消费的消息的消费(单线程消费者)
是应该basicReject让消息重新入队么 这个情况下该消息的TTK会刷新么 我还想实现长时间没有骑手接单取消订单的功能

如果重新回队列TTL会重置
长时间没有骑手接单可以用死信;

可以使用RabbitMQ的延迟队列来实现等待至有骑手再消费的功能。具体来说,可以将未找到空闲骑手的消息发送到一个延迟队列中,设置延迟时间为一定的时间,例如30分钟。在30分钟后,如果仍然没有骑手接单,可以将消息从延迟队列中取出,重新发送到骑手服务队列中,等待下一次消费。这样可以避免消息一直占用队列资源,同时又不影响其他可以被消费的消息的消费。

在使用basicReject让消息重新入队时,需要注意消息的TTK是否会刷新。根据RabbitMQ的官方文档,如果使用basicReject将消息重新入队,消息的TTK不会刷新,即消息的过期时间不会重新计算。因此,在使用basicReject时,需要注意消息的过期时间,避免消息过期后仍然被重新入队。

为了实现长时间没有骑手接单取消订单的功能,可以在发送消息时设置消息的过期时间,例如30分钟。如果在30分钟内没有骑手接单,可以将消息从队列中删除,取消订单。同时,可以在消费者中设置定时任务,定时检查未接单的订单,如果超过一定时间仍未接单,可以自动取消订单。这样可以避免订单一直占用队列资源,同时又不影响其他可以被消费的消息的消费。