2

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

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

如何从控制器或库内部访问在 Bunny 连接上打开的通道/队列?

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

4

2 回答 2

3

队列:如果你给队列起一个名字,你可以尽可能多地调用同名的.queue,它永远不会创建一个以上的队列,但如果它因任何原因消失,它会重新创建队列。

 handle_to_my_queue = $rabbit_channel.queue(queue_name)

Channels:如果您使用 id 创建频道,那么您可以调用 create_channel ,它的行为就像“查找或创建”。

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

配置/初始化程序/rabbit.rb

$rabbit_connection = Bunny.new
$rabbit_connection.start
$rabbit_channel = $rabbit_connection.create_channel
于 2017-01-13T05:05:59.567 回答
2

正如Aaron Henderson所说,您只需要一个保存连接会话的全局变量。

创建队列时可以指定名称,使用同名访问,使用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 负责在通道打开和关闭时分配和释放它们。几乎从不需要显式指定频道 ID。每个连接的最大通道数有限制,通常为 65536。请注意,在客户端和服务器上分配通道非常便宜,因此拥有数十、数百甚至数千个通道都不是问题,请在此处阅读有关通道的更多信息。

使用兔子会话创建一个队列。

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

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

  sample_queue = sample_channel.queue('sample.queue')
于 2017-02-01T11:54:29.940 回答