Рельсы sidekiq фоновый процесс

У меня проблема с настройкой сервера 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

1 ответ

Я думаю, что вам нужно переместить этот блок

@consumer.loop do |message|
end

как-то внутри вашего рабочего, так как я думаю, что потребление выполняется после выполнения блока.

Другие вопросы по тегам