gpt4 book ai didi

queue - rabbitmq 中的池化连接或 channel 之间有性能差异吗?

转载 作者:行者123 更新时间:2023-12-03 05:46:01 27 4
gpt4 key购买 nike

我是 Rabbitmq(和编程)的新手,如果这是显而易见的,请提前抱歉。我正在创建一个池以在正在队列上工作的线程之间共享,但我不确定是否应该使用池中的连接或 channel 。

我知道我需要 channel 来完成实际工作,但是每个连接拥有一个 channel 是否有性能优势(就队列的吞吐量而言)?或者我最好只为每个应用程序使用一个连接并池化多个 channel ?

注意:因为我正在汇集资源,所以初始成本不是一个因素,因为我知道连接比 channel 更昂贵。我对吞吐量更感兴趣。

最佳答案

我在 rabbitmq website 上找到了这个它靠近底部,所以我引用了下面的相关部分。

tl;dr 版本是每个应用程序应该有 1 个连接,每个线程应该有 1 个 channel 。

Connections

AMQP connections are typically long-lived. AMQP is an applicationlevel protocol that uses TCP for reliable delivery. AMQP connectionsuse authentication and can be protected using TLS (SSL). When anapplication no longer needs to be connected to an AMQP broker, itshould gracefully close the AMQP connection instead of abruptlyclosing the underlying TCP connection.

Channels

Some applications need multiple connections to an AMQP broker.However, it is undesirable to keep many TCP connections open at thesame time because doing so consumes system resources and makes it moredifficult to configure firewalls. AMQP 0-9-1 connections aremultiplexed with channels that can be thought of as "lightweightconnections that share a single TCP connection".

For applications that use multiple threads/processes for processing,it is very common to open a new channel per thread/process and notshare channels between them.

Communication on a particular channel is completely separate fromcommunication on another channel, therefore every AMQP method alsocarries a channel number that clients use to figure out which channelthe method is for (and thus, which event handler needs to be invoked,for example).

建议每个线程有 1 个 channel ,即使它们是线程安全的,因此您可以让多个线程通过一个 channel 发送数据。就您的应用程序而言,我建议您坚持每个线程 1 个 channel 。

此外,建议每个 channel 仅拥有 1 个消费者。

这些只是指导原则,因此您必须进行一些测试才能了解最适合您的方法。

该帖子有一些见解 herehere .

尽管有这些指导方针this post表明拥有多个连接很可能不会影响性能。虽然没有具体说明是在谈论客户端还是服务器(rabbitmq)端。一方面,它当然会使用更多的系统资源和更多的连接。如果这不是问题并且您希望获得更多吞吐量,那么拥有多个连接确实可能更好,如 this post建议多个连接将为您提供更多吞吐量。原因似乎是即使有多个 channel ,一次也只有一条消息通过连接。因此,一条大消息将阻塞整个连接,或者一个 channel 上的许多不重要消息可能会阻塞同一连接但不同 channel 上的重要消息。资源再次成为一个问题。如果您通过一个连接耗尽了所有带宽,那么与在一个连接上使用两个 channel 相比,添加额外的连接不会提高性能。此外,每个连接都会使用更多的内存、CPU 和文件句柄,但这很可能不是一个问题,尽管在扩展时可能会出现问题。

关于queue - rabbitmq 中的池化连接或 channel 之间有性能差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com