如果处理时间过长,有什么方法可以让 RabbitMQ 丢弃消息?
例如,如果我有一个电子邮件队列,而消费者脚本发送电子邮件的时间过长,则使其丢弃消息(将其放入死信交换中)并选择队列中的下一个项目。
我知道,x-message-ttl
但这不适用于这里,因为一旦消息开始被处理,它就会被忽略。
如果处理时间过长,有什么方法可以让 RabbitMQ 丢弃消息?
例如,如果我有一个电子邮件队列,而消费者脚本发送电子邮件的时间过长,则使其丢弃消息(将其放入死信交换中)并选择队列中的下一个项目。
我知道,x-message-ttl
但这不适用于这里,因为一旦消息开始被处理,它就会被忽略。
我认为没有办法在经纪人身上做你想做的事。要将消息移至死信交换,您需要发送reject
或nack
回复在您的情况下似乎不可能的消息。
例如,您有EmailSender
服务和EmailGenerator
服务。你可以这样组织它:
EmailGenerator
用电子邮件发送消息。
EmailSender
收到它。
处理完成后,EmailSender
向.sent confirmation
EmailGenerator
EmailGenerator
跟踪到目前为止已成功发送的内容的状态。如果在 X 秒内EmailGenerator
没有收到sent confirmation
特定电子邮件的消息,它会重新发送相应的电子邮件消息。