0
У меня проблема с настройкой сервера sidekiq, процесс, кажется, работает на переднем плане, как только я обновляю свою страницу./consumer/fetch Мне нужно постоянно помещать его в фоновом режиме.rails sidekiq background process
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
Hassan, @ consumer.loop - непрерывный цикл, реализация выполняется (правда) {process mesesage}. я не знаю, как процесс возвращается из этого –
, теперь, когда я более подробно рассмотрю его, sidekiq не должен возвращать вам что-либо. Эта строка: return @message = Message.new (hash) if hash ["concern"] == 'order_create' или hash ["concern"] == 'first_payment' не возвращает управление обратно вызывающему. –