【问题标题】:Rabbitmq - Should multithreaded application use single or multi channelsRabbitmq - 多线程应用程序应该使用单通道还是多通道
【发布时间】:2014-04-12 15:38:12
【问题描述】:

我的应用有多个线程将消息发布到单个 RabbitMQ 集群。
读兔docs:我读到以下内容:

对于使用多个线程/进程进行处理的应用程序,很常见的做法是为每个线程/进程打开一个新通道,并且它们之间不共享通道。

而且我明白,而不是打开多个连接(昂贵)
最好打开多个渠道。

但是为什么不对所有线程使用单个通道呢?
使用多个渠道而不是单个渠道有什么好处?

【问题讨论】:

  • 该共享通道将是一种共享资源,并且要求您确保一次只有一个线程使用该资源——这可能会极大地影响多线程的性能(如果不完全没有意义的话) .

标签: rabbitmq channel


【解决方案1】:

AMQP 具有Channel 的概念,为可靠的 TCP 连接提供更大的灵活性。为每条消息打开一个 TCP 连接会非常昂贵,因此他们提出了在连接中使用逻辑 Channels 的想法。

对所有线程都使用Channel 不是一个好主意,因为如果在特定线程中发生任何故障并且Channel 死掉,其余线程将抛出异常AlreadyClosedException。通道可能因多种原因而死亡:例如,尝试声明已使用其他参数声明的内容或尝试取消不存在的消费者、发布到不存在的交易所等...

我最好的建议是拥有一个在局部变量中保存Channel 并实现ShutdownListener 接口的对象,因此每次通道发生故障时,它都能够从连接中恢复并创建一个新的.所以我想说主要的好处是容错性和可扩展性,因为如果Channel 死了,它不会影响其余的。

【讨论】:

    猜你喜欢
    • 2019-04-18
    • 2013-09-03
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2013-09-09
    • 2018-01-15
    • 1970-01-01
    • 2022-09-25
    相关资源
    最近更新 更多