QPID C ++客户端多线程优化

时间:2012-04-03 17:19:50

标签: c++ multithreading client amqp qpid

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

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

有几个稀疏文档类用于与QPID代理进行交互。连接,会话,发件人和接收者。 Connections提供会话,Sessions提供发件人或接收者。在阅读各种QPID文档之后,我不清楚这些对象中哪些是线程安全的(或者不是线程安全的),或者导致在客户端库中创建线程。根据QPID FAQ,代理处的线程发生在会话级别。没有提到它在客户端发生的地方。

客户端应用程序中将有多个线程上下文需要将数据推送到其中一个上行链路队列。是否最好有一个服务多个上下文的Sessions,Connections或Senders池?或者QPID是否已针对此方案内置优化,可能意味着1个共享发件人就足够了?

目标是在某处没有单个线程瓶颈,但能够根据当前的流量负载并行地有效扩展。

1 个答案:

答案 0 :(得分:1)

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