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