2013-08-01 39 views
0

我在配置sidekiq服務器時出現問題,只要我刷新頁面,該進程似乎在前臺運行。 /消費者/抓取我需要將其放在後臺永久。rails sidekiq後臺進程

consumers_controller.rb

require 'kafka' 

class ConsumersController < ApplicationController 

    def fetch 

    @consumer = Kafka::Consumer.new({ :host => ENV["host"], 
     :port => ENV["port"], 
     :topic => ENV["topic"]}) 

    @consumer.loop do |message| 
     logger.info "-------------#{message.inspect}--------------" 
     logger.info "-------------#{message.first.payload.inspect}--------------" 
     unless message.blank? 
     ConsumerWorker.perform_async(message.first.payload) 
     end 
    end 
    end 
end 

consumer_worker.rb

class ConsumerWorker 

    include Sidekiq::Worker 

    def perform(message) 
    payload = message.first["payload"] 
    hash = JSON.parse(payload) 
    return @message = Message.new(hash) if hash["concern"] == 'order_create' or hash["concern"] == 'first_payment' 
    end 

end 

message.rb

class Message 

    attr_reader :bundle_id, :order_id, :order_number, :event 

    def initialize(message) 
    @payload = message["payload"] 
    @bundle_id = @payload["bundle_id"] 
    @order_id = @payload["order_id"] 
    @order_number = @payload["order_number"] 
    @event = message["concern"] 
    end 
end 

回答

0

我認爲你需要移動此塊

@consumer.loop do |message| 
end 

不知何故,因爲我認爲消耗是在塊執行後完成的。

+0

Hassan,@ consumer.loop是一個連續循環,其實現是while(true){process mesesage}。我不知道這個過程是如何從這個 –

+0

實際返回的,現在我已經仔細研究了它,sidekiq不應該返回任何東西。 此行: 返回@message = Message.new(散列)如果散列[「關注」] =='order_create'或散列[「關注」] =='first_payment' 不返回控制權給調用者。 –