SideKiq中间件和Ruby

时间:2018-09-14 18:51:05

标签: ruby-on-rails ruby middleware sidekiq

我是StackOverflow的新手。我想问一个问题,因为我不清楚如何创建SideKiq中间件。 让我尝试为您提供更多详细信息。我希望有一个中间件在队列中进行搜索(通常是默认设置),如果存在具有相同参数的作业。 通常,我发送这样的参数: 执行(client_id,port_number)

我希望能够使用中间件查看默认队列中是否已经有一个client_id和一个port_number,如果有,我只是返回并将其登录到记录器中。

这是我到目前为止的内容(我现在想记录数据)。

在我的config / initializers / 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 / argument_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”文件中看不到任何类似于“使用参数{#job.inspect}读取和记录#{queue}”的字符串。

有人知道如何使用中间件吗,我应该在上面的代码中放什么地方? 我读了所有有关https://github.com/mperham/sidekiq/wiki/Middleware以及其他StackOverflow问题和博客的信息,但似乎我无法理解为什么我的代码未触发。

谢谢,我希望收到您的来信。

Rob

0 个答案:

没有答案