#ruby #rabbitmq
Вопрос:
У меня есть небольшой класс, который я использую для подключения к RabbitMQ с библиотекой под названием bunny
module ASYNC
@queue = nil
@channel = :field_time
def self.init_exchange
conn = Bunny.new("amqp://#{ENV['RABBITMQ_USER']}:#{ENV['RABBITMQ_PASS']}@#{ENV['RABBITMQ_HOST']}", client_properties: { connection_name: :app })
conn.start
## open up a channel
ch = conn.create_channel
## create a que on the channel
@queue = ch.queue(@channel.to_s, durable: true, auto_delete: false)
end
def self.do(object = {})
@queue ||= init_exchange
@queue.publish(object.to_json, routing_key: @queue.name)
rescue StandardError => e
::WorkerLogger.log(level: :fatal, payload: { error: e.message })
::WorkerLogger.log(level: :fatal, payload: { error: e.backtrace })
end
end
После мониторинга моего приложения после выходных я заметил, что у меня 5 открытых подключений, в то время как должно быть только 1
Я использую Grape API в качестве своей платформы HTTP RestAPI, везде в моем приложении вызывается этот класс. Я, к сожалению, ошибочно предположил, что @queue
это не будет повторяться случайным образом
Как я могу гарантировать, что @queue
в среде выполнения используется только один?