1

我正在寻找在高消息流量下线程化 C++ Apache QPID 客户端以获得最佳性能的最佳方法。

我们的经纪人将包括 3 个交易所,每个交易所都有 2 个单向队列。c++ 客户端将推送到的 3 个“上行链路”队列上会有大量流量。

有几个文档很少的类用于与 QPID 代理接口。连接、会话、发送者和接收者。连接提供会话,会话提供发送者或接收者。在阅读了各种 QPID 文档后,我不清楚这些对象中哪些是线程安全的(或不是线程安全的),或者哪些会导致在客户端库中创建线程。根据 QPID FAQ,代理的线程发生在会话级别。没有提到它发生在客户端的位置。

客户端应用程序中有多个线程上下文需要将数据推送到上行链路队列之一。最好有一个服务于多个上下文的会话、连接或发件人池吗?或者 QPID 是否在这种情况下内置了优化,这可能意味着 1 个共享发件人就足够了?

目标是在某处不存在单线程瓶颈,而是能够根据存在的流量负载有效地并行扩展。

4

1 回答 1

1

代理中的线程发生在连接级别。即,给定连接上的所有流量都由线程池序列化和服务。在客户端,有一个由所有连接共享的线程池来执行所需的 IO。应用程序可以自己创建线程来驱动发送者/接收者。提到的所有对象(连接、会话、发送者和接收者)都是线程安全的,但通常我会建议每个会话一个线程,并且每个连接可能一个会话是最佳的。

于 2012-04-04T18:21:50.410 回答