Как получить доступ к каналам/очередям, открытым в сеансе Bunny?

Я использую Ruby-клиент Rabbit MQ (Bunny).

Я переместил конфиг Bunny и процесс инициализации в файл initializer.

Как я могу получить доступ к каналам/очередям, открытым в соединении Bunny, изнутри контроллера или библиотеки?

Я получаю «истину», когда вызываю Bunny::Session#open?, но я не могу понять, как получить доступ ко всему, что мне нужно в этом сеансе.


person Bogdan Popa    schedule 06.07.2016    source источник


Ответы (2)


Очереди: если вы дадите очереди имя, вы можете вызывать .queue с тем же именем столько раз, сколько хотите, он никогда не создаст более одной очереди, но будет воссоздавать очередь, если она исчез по какой-либо причине.

 handle_to_my_queue = $rabbit_channel.queue(queue_name)

Каналы: если вы создаете канал с идентификатором, вы можете вызвать create_channel, и он будет действовать как «найти или создать».

Для каналов обычно нужен только один, поэтому я использую глобальную переменную (ох, я знаю!).

конфиг/инициализаторы/rabbit.rb

$rabbit_connection = Bunny.new
$rabbit_connection.start
$rabbit_channel = $rabbit_connection.create_channel
person Aaron Henderson    schedule 13.01.2017

Как сказал Аарон Хендерсон, вам просто нужна глобальная переменная, которая содержит сеанс подключения.

Вы можете указать имя при создании очередей, и то же имя можно использовать для доступа к нему, а параметр id можно использовать для доступа к каналу.

Инициализируйте клиент Bunny с такими параметрами, как хост, порт и учетные данные:

$rmq_session = Bunny.new(
                          host: host,
                          port: port,
                          username: username,
                          password: password
                        )
$rmq_session.start

Создайте канал с сеансом кролика.

sample_channel = $rmq_session.create_channel

К тому же каналу можно получить доступ с помощью параметра id.

$rmq_session.channel(sample_channel.id)

Каналы идентифицируются их идентификаторами, которые являются целыми числами. Bunny позаботится об их распределении и освобождении при открытии и закрытии каналов. Почти никогда не требуется явно указывать идентификаторы каналов. Существует ограничение на максимальное количество каналов на соединение, обычно 65536. Обратите внимание, что выделение каналов очень дешево как для клиента, так и для сервера, поэтому наличие десятков, сотен или даже тысяч каналов не проблема Подробнее о канале читайте здесь.

Создайте очередь с сеансом кролика.

  sample_queue = sample_channel.queue('sample.queue')

Вы можете получить доступ к созданной выше очереди, указав имя очереди. Это не создаст новую очередь, если она уже существует.

  sample_queue = sample_channel.queue('sample.queue')
person Ashik Salman    schedule 01.02.2017