如何访问Bunny会话中打开的频道/队列?

时间:2016-07-06 09:45:07

标签: ruby-on-rails rabbitmq rabbitmq-exchange bunny

我正在使用Rabbit MQ的Ruby客户端(Bunny)。

我在初始化程序中移动了Bunny配置和初始化过程。

如何从控制器或lib中访问Bunny连接上打开的通道/队列?

当我致电Bunny::Session#open?时,我得到'真实',但我似乎无法弄清楚如何在该会话中访问我需要的所有内容。

2 个答案:

答案 0 :(得分:2)

队列:如果您为队列命名,您可以根据需要调用同名的.queue,它永远不会创建多于一个队列,但它会重新创建因为任何原因它消失了。

 handle_to_my_queue = $rabbit_channel.queue(queue_name)

频道:如果您使用ID创建频道,则可以调用create_channel,它将像"查找或创建"。

对于频道,你通常只需要一个,所以我使用全局变量(喘息,我知道!)。

配置/初始化/ rabbit.rb

$rabbit_connection = Bunny.new
$rabbit_connection.start
$rabbit_channel = $rabbit_connection.create_channel

答案 1 :(得分:2)

正如Aaron Henderson所说,你只需要一个包含连接会话的全局变量。

您可以在创建队列时指定名称,并且可以使用相同的名称 访问它,id参数可用于访问频道。

使用主机,端口和凭据等选项初始化Bunny客户端:

setValues

使用bunny会话创建频道。

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

id参数可以访问相同的通道。

sample_channel = $rmq_session.create_channel

频道由其整数ID标识。当通道被打开和关闭时,Bunny负责分配和释放它们。几乎没有必要明确指定通道ID。每个连接的最大通道数量有限制,通常为65536.请注意,在客户端和服务器上分配通道非常便宜,因此拥有数十,数百甚至数千个通道不是问题Read more about channel here

使用bunny会话创建队列。

$rmq_session.channel(sample_channel.id)

您可以通过引用队列名称来访问上面创建的队列。如果已存在新队列,则不会创建新队列。

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