我是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