尽管RabbitMQ被拒绝或已被确认,但它仍会堆叠未堆叠的消息

时间:2017-02-08 20:41:26

标签: ruby rabbitmq bunny sneakers

下面我的Ruby代码处理RabbitMQ事件。我正在使用Bunny for Ruby和sneakers gem。虽然我认为我正在对所有可能发生的事件采取行动,但本地频道正在堆叠着未经处理的消息。每次日志显示如下内容时都会发生这种情况:

sneakers_1          | I, [2017-02-08T19:03:31.088857 #14]  INFO -- : Rejecting 172.21.0.21. Name invalid tld

这是我的Ruby代码:

require 'sneakers'

class EventProcessor
  include Sneakers::Worker
  from_queue :edge_requests


  def work(msg)
    msg = JSON.parse(msg)
    domain = msg[':path'].split('/').first
    domain = domain.downcase.sub(/^www\./, '')
    domain = Domain.find_or_initialize_by(name: domain) {|domain| domain.status = :active}
    unless domain.valid?
      Rails.logger.info "Rejecting #{domain.name}. #{domain.errors.full_messages.join(',')}"
      reject!
      return
    end
    domain.persisted? ? domain.touch : domain.save!
    ack!
  rescue
    Rails.logger.error $!
    reject!
  end
end

我的reject!可能有问题吗?有点卡住了几个小时。我尝试使用reject!更改所有ack!,但似乎没有任何帮助。

也许我正在以错误的方式使用rescue

1 个答案:

答案 0 :(得分:0)

答案稍晚,但遇到了这个问题,解决方案总是返回ack!reject!

所以改变这个:

reject!
return

return reject!