RabbitMQ Java客户端有以下概念:
连接
-与RabbitMQ服务器实例的连接通道
-???我试图理解他们之间的关系,更重要的是,他们之间的联系。
通道
是什么,除了这是您发布和使用的结构,并且它是从一个开放的连接创建的。如果有人能向我解释一下“通道”代表什么,可能有助于澄清一些问题。
>
连接
表示到message broker的真实TCP连接,而通道
是其内部的虚拟连接(AMQP连接)。这样,您就可以在应用程序中使用任意多的(虚拟)连接,而不会用TCP连接重载代理。
您可以使用一个通道
进行所有操作。但是,如果您有多个线程,建议为每个线程使用不同的channel
。
通道线程-Java客户端API安全指南:
通道实例对于多线程使用是安全的。进入通道的请求被序列化,一次只有一个线程能够在通道上运行命令。即便如此,应用程序也应该更喜欢使用每个线程的通道,而不是跨多个线程共享相同的通道。
通道
和队列
之间没有直接关系。通道
用于向代理发送AMQP命令。这可以是创建队列或类似的,但这些概念并不是绑定在一起的。
每个使用者
在从使用者线程池分配的自己的线程中运行。如果多个使用者订阅到同一队列,则代理使用循环在它们之间平均分配消息。请参阅教程二:“工作队列”。
还可以将相同的使用者
附加到多个队列。您可以将消费者理解为回调。每次消息到达使用者绑定到的队列时,都会调用这些命令。对于Java客户机,每个使用者都有一个方法handledelivery(...)
,它表示回调方法。您通常要做的是子类DefaultConsumer
并重写HandleDelivery(...)
。注意:如果您将同一个使用者实例附加到多个队列,则此方法将由不同的线程调用。因此,如果需要,请注意同步。