小编Dan*_*Dan的帖子

处理RabbitMQ中的死信

TL; DR:一旦我修复了最初导致邮件被拒绝的消费者代码,我需要将死信信息"重播"回原始队列.

我为RabbitMQ配置了死信交换(DLX),并成功将拒绝的消息路由到死信队列.但现在我想查看死信队列中的消息,并尝试决定如何处理它们.一旦违规消费者代码被修复,这些消息中的一些(很多?)应该被重放(重新排队)到它们的原始队列(在"x-death"标题中可用).但是我该怎么做呢?我应该编写一个从死信队列中读取消息的一次性程序,并允许我指定一个目标队列来发送它们吗?那么搜索死信队列呢?如果我知道一条消息(比方说用JSON编码)有一个我想要搜索和重放的特定属性怎么办?例如,我修复了一个缺陷,我知道它将允许PacketId:1234消息现在成功处理.我想也可以为此写一个一次性的程序.

我当然不能成为第一个遇到这些问题的人,我想知道是否有其他人已经解决了这些问题.似乎应该有某种瑞士军刀用于此类事情.我在谷歌和Stack Overflow上进行了相当广泛的搜索,但并没有真正提出太多.我能找到的最接近的东西是铲子,但这看起来并不像是工作的正确工具.

messaging amqp rabbitmq dead-letter

11
推荐指数
1
解决办法
3469
查看次数

写入STDOUT时,Resque作业失败并显示"Broken pipe @ io_write - <STDOUT>"(Errno :: EPIPE)

我们几年来一直在使用Resque运行后台作业,但最近开始使用以下错误消息获取失败的作业,我不确定我们的代码或我们的环境会导致这种情况发生了什么变化.

Errno::EPIPE
Broken pipe @ io_write - <STDOUT>
Run Code Online (Sandbox Code Playgroud)

每当作业调用puts(显然写入STDOUT)时,我们就会得到这个.

有谁可以请帮助阐明这一点?

ruby-on-rails resque

7
推荐指数
0
解决办法
545
查看次数

为什么在循环内的事务内的救援块内调用 next 不起作用?

我有一个这样的循环:

# 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)

ruby activerecord transactions ruby-on-rails

3
推荐指数
1
解决办法
2976
查看次数