SideKiq Middleware и Ruby - PullRequest
       6

SideKiq Middleware и Ruby

0 голосов
/ 14 сентября 2018

Я новичок в StackOverflow. Я хотел бы задать вам вопрос, так как мне не понятно, как создать промежуточное программное обеспечение SideKiq. Позвольте мне попытаться дать вам дополнительную информацию. Я хотел бы иметь Middleware, который ищет в очередях (обычно по умолчанию), если есть задания с такими же аргументами. Как правило, я посылаю аргументы, как это: выполнить (client_id, номер_порта)

Я хотел бы иметь возможность видеть, используя промежуточное программное обеспечение, есть ли уже client_id и номер_порта в очереди по умолчанию, и если это так, я просто возвращаюсь и регистрирую его в регистраторе.

Это то, что у меня есть (сейчас я хочу записать данные).

в конфиге / инициализаторах / sidekiq.rb у меня

require 'sidekiq/api'

#Sidekiq default host redis://localhost:6379
Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://localhost:6379/12' }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://localhost:6379/12' }
  config.client_middleware do |chain|
    chain.add ArgumentLogging
  end
end

Теперь «ArgumentLogging» должен быть классом, который будет регистрировать аргументы; но я не знаю, где добавить код для промежуточного программного обеспечения, если честно.

Я добавил его в app / middleware / arguments_logging.rb

module Sidekiq
    class ArgumentLogging
      # @param [String, Class] worker_class the string or class of the worker class being enqueued
      # @param [Hash] job the full job payload
      #   * @see https://github.com/mperham/sidekiq/wiki/Job-Format
      # @param [String] queue the name of the queue the job was pulled from
      # @param [ConnectionPool] redis_pool the redis pool
      # @return [Hash, FalseClass, nil] if false or nil is returned,
      #   the job is not to be enqueued into redis, otherwise the block's
      #   return value is returned
      # @yield the next middleware in the chain or the enqueuing of the job
      def call(worker_class, job, queue, redis_pool) 
        # return false/nil to stop the job from going to redis
        Rails.logger.info("Reading and logging #{queue} with arguments: #{job.inspect}")
        yield
      end
    end
end

Это то, что у меня есть до сих пор. Но я не вижу в своем файле "development.log" строки, похожей на "Чтение и ведение журнала # {queue} с аргументами: # {job.inspect}"

Кто-нибудь знает, как использовать Middleware и куда мне поместить код выше? Я прочитал все о https://github.com/mperham/sidekiq/wiki/Middleware и других вопросах и блогах StackOverflow, но мне кажется, что я не могу понять, почему мой код не запускается.

Спасибо, и я с нетерпением жду вашего ответа.

Rob

...