2017-02-08 13 views
0

내 Ruby 코드가 RabbitMQ 이벤트를 처리합니다. Ruby에 Bunny를 사용하고 sneakers gem을 사용하고 있습니다. 내가 가능한 모든 사건에 대해 행동하고 있다고 생각 하긴하지만, 로컬 채널은 해독되지 않은 메시지로 쌓여 가고 있습니다. 이건 내 루비 코드RabbitMQ는 거치지 않거나 확인되었지만 스택되지 않은 메시지를 계속 유지합니다.

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

:

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!에 잘못이 무언가 같이 로그가 말한다 때마다 어떻게됩니까? 일종의 시간 동안 붙어. ack!로 모든 reject!을 변경하려고했지만 아무 도움이되지 않습니다.

아마도 내가 rescue 잘못된 방법을 사용하고 있습니까?

답변

0

약간 늦게 대답하지만이 문제에 직면하고 해결책은 항상 ack! 또는 reject! 중 하나를 반환합니다.

그래서이를 변경 :

reject! 
return 

return reject!