我想利用RabbitMQ实现一个外卖系统 遇到了一个问题
如果重新回队列TTL会重置
长时间没有骑手接单可以用死信;
可以使用RabbitMQ的延迟队列来实现等待至有骑手再消费的功能。具体来说,可以将未找到空闲骑手的消息发送到一个延迟队列中,设置延迟时间为一定的时间,例如30分钟。在30分钟后,如果仍然没有骑手接单,可以将消息从延迟队列中取出,重新发送到骑手服务队列中,等待下一次消费。这样可以避免消息一直占用队列资源,同时又不影响其他可以被消费的消息的消费。
在使用basicReject让消息重新入队时,需要注意消息的TTK是否会刷新。根据RabbitMQ的官方文档,如果使用basicReject将消息重新入队,消息的TTK不会刷新,即消息的过期时间不会重新计算。因此,在使用basicReject时,需要注意消息的过期时间,避免消息过期后仍然被重新入队。
为了实现长时间没有骑手接单取消订单的功能,可以在发送消息时设置消息的过期时间,例如30分钟。如果在30分钟内没有骑手接单,可以将消息从队列中删除,取消订单。同时,可以在消费者中设置定时任务,定时检查未接单的订单,如果超过一定时间仍未接单,可以自动取消订单。这样可以避免订单一直占用队列资源,同时又不影响其他可以被消费的消息的消费。