QPID C ++ Client Многопоточная оптимизация - PullRequest
1 голос
/ 03 апреля 2012

Я ищу лучший способ для потоковой передачи клиента C ++ Apache QPID для оптимальной производительности при большом трафике сообщений.

Наш брокер будет включать 3 обмена, каждый с 2 ​​однонаправленными очередями.В 3 «восходящих» очередях будет значительный трафик, на который будет направлять клиент c ++.

Существует несколько редко документированных классов, используемых для взаимодействия с брокером QPID.Соединение, Сеанс, Отправитель и Получатель.Соединения предоставляют сеансы, а сеансы предоставляют отправителей или получателей.После прочтения различной документации QPID мне неясно, какой из этих объектов является поточно-ориентированным (или не поточно-ориентированным), или который приводит к созданию потока в клиентской библиотеке.Согласно QPID FAQ, многопоточность в брокере происходит на уровне сеанса.Не упоминается, где это происходит у клиента.

В клиентском приложении будет несколько контекстов потока, которые должны будут передавать данные в одну из очередей восходящей линии связи.Лучше ли иметь пул сеансов, подключений или отправителей, которые будут обслуживать несколько контекстов?Или QPID имеет встроенную оптимизацию для этого сценария, что может означать, что 1 общего отправителя будет достаточно?

Цель состоит в том, чтобы не иметь узкополосного узкого места где-либо с одной резьбой, а иметь возможность эффективно масштабировать параллельно в соответствии с имеющейся нагрузкой трафика.

1 Ответ

1 голос
/ 04 апреля 2012

Поток в брокере происходит на уровне соединения .Т.е. весь трафик на данном соединении сериализуется и обслуживается пулом потоков.На клиенте есть пул потоков, совместно используемых всеми соединениями, которые будут выполнять требуемый ввод-вывод.Приложения могут сами создавать потоки для управления отправителями / получателями.Все упомянутые объекты (Соединения, Сеанс, Отправители и Получатели) предназначены для обеспечения безопасности потоков, однако, как правило, я бы рекомендовал использовать поток для каждого сеанса и, вероятно, один сеанс для каждого соединения.

...