我正在使用 Rabbit MQ 的 Ruby 客户端(Bunny)。
我在初始化程序中移动了洞兔子配置和初始化过程。
如何从控制器或库内部访问在 Bunny 连接上打开的通道/队列?
当我打电话时,我得到了“真实”,Bunny::Session#open?
但我似乎无法弄清楚如何访问该会话中我需要的所有内容。
我正在使用 Rabbit MQ 的 Ruby 客户端(Bunny)。
我在初始化程序中移动了洞兔子配置和初始化过程。
如何从控制器或库内部访问在 Bunny 连接上打开的通道/队列?
当我打电话时,我得到了“真实”,Bunny::Session#open?
但我似乎无法弄清楚如何访问该会话中我需要的所有内容。
队列:如果你给队列起一个名字,你可以尽可能多地调用同名的.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
正如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')