我正在使用Rabbit MQ的Ruby客户端(Bunny)。
我在初始化程序中移动了Bunny配置和初始化过程。
如何从控制器或lib中访问Bunny连接上打开的通道/队列?
当我致电Bunny::Session#open?
时,我得到'真实',但我似乎无法弄清楚如何在该会话中访问我需要的所有内容。
答案 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')