我正在使用Rabbit MQ的Ruby客户端(Bunny)。
我在一个初始化器中移动了hole Bunny配置和初始化过程。
如何从控制器或库内部访问在Bunny连接上打开的通道/队列?
当我调用Bunny::Session#open?时,我得到了'true‘,但我似乎找不出如何在该会话中访问所需的所有内容。
发布于 2017-01-13 13:06:00
Queues:如果你给队列一个名字,你可以任意调用同名的.queue,它永远不会创建超过一个队列,但是如果它由于任何原因消失了,它将重新创建队列。
handle_to_my_queue = $rabbit_channel.queue(queue_name)Channels:如果你创建了一个带有id的频道,那么你可以调用create_channel,它就像一个“查找或创建”。
对于通道,您通常只需要一个,所以我使用了一个全局变量(天哪,我知道!)
config/initializers/rabbit.rb
$rabbit_connection = Bunny.new
$rabbit_connection.start
$rabbit_channel = $rabbit_connection.create_channel发布于 2017-02-01 19:54:30
正如Aaron Henderson所说,您只需要一个保存连接会话的全局变量。
您可以在创建队列时指定名称,可以使用相同的名称来访问它,可以使用id参数来访问通道。
使用主机、端口和凭证等选项初始化Bunny client:
$rmq_session = Bunny.new(
host: host,
port: port,
username: username,
password: password
)
$rmq_session.start使用bunny会话创建一个通道。
sample_channel = $rmq_session.create_channel可以通过id参数访问相同的通道。
$rmq_session.channel(sample_channel.id)通道由它们的ids标识,ids是整数。当通道打开和关闭时,Bunny负责分配和释放它们。几乎不需要显式地指定通道ids。每个连接的最大通道数有限制,通常为65536。请注意,在客户端和服务器上分配通道都非常便宜,因此拥有数十个、数百个甚至数千个通道不是问题Read more about channel here。
创建一个包含bunny会话的队列。
sample_queue = sample_channel.queue('sample.queue')您可以通过引用队列名称来访问上面创建的队列。如果已经存在一个队列,则不会创建新的队列。
sample_queue = sample_channel.queue('sample.queue')https://stackoverflow.com/questions/38220959
复制相似问题