Я новичок в 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