我一直在尝试在线程之间共享连接,并且只在创建线程时打开通道,但经过更多的研究后,我想我也想尝试connection pooling.我怎么能在rabbitmq上这样做?或者这是我一般可以申请的一般概念吗?我的目标是生成X线程,然后让它们不必打开新的通道(这需要在客户端和服务器之间建立循环).
由于线程是他们自己的类,我不确定我是否需要将池放在生成线程的类本身或者它们去哪里?我也有多种类型的线程我想要在它们之间共享这些连接(不是只是一个).那可能吗?
为了给您一个大致的想法,这里是如何在rabbitmq中建立连接/渠道:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel(); //I want to share several of these between threads
Run Code Online (Sandbox Code Playgroud) 到目前为止,对于 RabbitMQ 中的单个队列,我使用了单个通道,但是现在我动态创建了多个队列,因此我是否必须为每个队列创建一个新通道,或者一个通道可以从不同队列接收消息/向不同队列发送消息?
# consuming
for ch in items:
channel1 = rconn.channel()
channel1.queue_declare(queue=itm)
channel1.basic_consume(some_callback, queue=itm, no_ack=True)
channel1.start_consuming()
# publishing
for ch in items:
# ....
channel1.basic_publish(exchange="", routing_key=itm, body="fdsfds")
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解 AMQP 协议的框架部分。我知道 AMQP 首先打开一个 TCP 连接,然后在该连接内使用多个通道来防止建立多个 TCP 连接的开销(这在这里有很好的解释)。现在我正在努力理解链接如何发挥作用。所以根据我的理解,它的工作原理如下:
我的理解正确吗?既然已经有了渠道,为什么还需要“链接”的概念呢?为什么不直接让通道成为两个节点之间的连接呢?用简单的英语来说,频道和链接之间有什么区别?
微软表示:
通道是连接之上的单向出站虚拟传输路径。
和
链接是通过会话创建的通信路径,可以单向传输消息
这对我来说基本上是一样的。如果有人能用简单的术语解释频道、会话和链接之间的关系,我将非常高兴。