Я пишу службу, которая обслуживает входящие запросы без сохранения состояния. Все запросы представляют собой математические вычисления, выполнение которых не занимает много времени (максимум 2 мс).
Я использую Tibco EMS для связи между клиентом и сервером. Предоставляется клиентская библиотека, которая обертывает логику на стороне клиента (например, конвертирует данные в сообщение EMS и т. Д.) И отправляет запрос в очередь запросов. Серверная часть обрабатывает запрос и отправляет ответ в отдельную очередь. Это прекрасно работает.
Сторона сервера многопоточная. Новый поток создается при получении нового входящего запроса. Таким образом, запросы обрабатываются одновременно.
На стороне сервера используется одно единственное соединение EMS с сервером EMS. Однако, поскольку сеанс EMS не является потокобезопасным, если я хочу иметь возможность записывать ответ в очередь EMS в каждом потоке, мне нужно создать один сеанс для каждого потока, используя connectionFactory. Это ухудшило производительность.
Время, затрачиваемое на трафик, составляет около 3-4 мс, т.е. время между отправкой запроса и получением ответа составляет около 5-6 мс (3-4 мс для транспортировки, маршала / демаршала, 2 мс для расчета).
Есть ли какое-нибудь решение, которое позволяет мне одновременно отправлять в очередь EMS без создания двух больших объектов JMS?
Есть ли еще какие-то важные правила, которые мне нужно соблюдать для дальнейшей оптимизации сервиса? Некоторые основные рекомендации по оптимизации уже выполнены:
- Используйте CachedConnectionPool
- Отправить сообщение JMS как NON_PERSISTANT
- Используйте одно соединение EMS для всех запросов.
Большое Вам спасибо.