当我的Hutch消费者失去与数据库的连接时,我想将我收到的所有消息重新排队,并稍后尝试处理(并保存到数据库)。
我发现我可以在我的消费者中使用requeue!这样的方法:
def process(message)
handle_message(message)
rescue ActiveRecord::ConnectionNotEstablished => error
Rails.logger.warn("Connection to database is broken: #{error}")
requeue!
ensure
::ActiveRecord::Base.clear_active_connections!
end
end
但是后来我会立即从Rabbit那里得到这条消息,因此,当消息明显无法保存到数据库时,我的消费者仍然试图处理此消息。
在这种情况下,是否可以在Hutch或RabbitMQ网站上设置超时?
答案 0 :(得分:0)
在这里回答https://github.com/gocardless/hutch/issues/161
不是没有使用Scheduled delivery exchange,也不是滥用TTL和死信。