Я ищу лучший способ использовать клиент C++ Apache QPID для оптимальной производительности при высоком трафике сообщений.
Наш брокер будет включать в себя 3 биржи, каждая с 2 однонаправленными очередями. Будет значительный трафик в 3 очередях "восходящей линии связи", на которые будет нажимать клиент С++.
Существует несколько малодокументированных классов, используемых для взаимодействия с брокером QPID. Соединение, сеанс, отправитель и получатель. Соединения предоставляют сеансы, а сеансы предоставляют отправителей или получателей. После прочтения различной документации QPID мне неясно, какие из этих объектов являются потокобезопасными (или не потокобезопасными) или что приводит к созданию потока в клиентской библиотеке. Согласно QPID FAQ, многопоточность в брокере происходит на уровне сеанса. Не упоминается, где это происходит у клиента.
В клиентском приложении будет несколько контекстов потоков, которые должны будут передавать данные в одну из очередей восходящего канала. Лучше ли иметь пул сеансов, соединений или отправителей, которые будут обслуживать несколько контекстов? Или QPID имеет встроенную оптимизацию для этого сценария, что потенциально означает, что 1 общего отправителя будет достаточно?
Цель состоит в том, чтобы не иметь где-то одного узкого места в потоке, а иметь возможность эффективно масштабироваться параллельно в зависимости от имеющейся нагрузки трафика.