TL; DR:一旦我修复了最初导致邮件被拒绝的消费者代码,我需要将死信信息"重播"回原始队列.
我为RabbitMQ配置了死信交换(DLX),并成功将拒绝的消息路由到死信队列.但现在我想查看死信队列中的消息,并尝试决定如何处理它们.一旦违规消费者代码被修复,这些消息中的一些(很多?)应该被重放(重新排队)到它们的原始队列(在"x-death"标题中可用).但是我该怎么做呢?我应该编写一个从死信队列中读取消息的一次性程序,并允许我指定一个目标队列来发送它们吗?那么搜索死信队列呢?如果我知道一条消息(比方说用JSON编码)有一个我想要搜索和重放的特定属性怎么办?例如,我修复了一个缺陷,我知道它将允许PacketId:1234消息现在成功处理.我想也可以为此写一个一次性的程序.
我当然不能成为第一个遇到这些问题的人,我想知道是否有其他人已经解决了这些问题.似乎应该有某种瑞士军刀用于此类事情.我在谷歌和Stack Overflow上进行了相当广泛的搜索,但并没有真正提出太多.我能找到的最接近的东西是铲子,但这看起来并不像是工作的正确工具.
我们几年来一直在使用Resque运行后台作业,但最近开始使用以下错误消息获取失败的作业,我不确定我们的代码或我们的环境会导致这种情况发生了什么变化.
Errno::EPIPE
Broken pipe @ io_write - <STDOUT>
Run Code Online (Sandbox Code Playgroud)
每当作业调用puts(显然写入STDOUT)时,我们就会得到这个.
有谁可以请帮助阐明这一点?
我有一个这样的循环:
# Iterate a list of items
req_wf_list.each do |req_wf|
# Begin a transaction
ReqWf.transaction do # ReqWf is an ActiveRecord model class
# Do some things
# ...
# 1. I want to be able to continue processing with the
# next iteration of the loop if there is an error here
# 2. I also want to rollback the transaction associated with
# this particular iteration if I encounter an error
begin
# Do something that might return …Run Code Online (Sandbox Code Playgroud) activerecord ×1
amqp ×1
dead-letter ×1
messaging ×1
rabbitmq ×1
resque ×1
ruby ×1
transactions ×1