Как правильно реализовать RPC RabbitMQ из веб-контейнера сервлета Java?
Я хотел бы, чтобы входящие веб-запросы Java-сервлета вызывали RabbitMQ, используя подход RPC, как описано здесь.
Тем не менее, я не уверен, как правильно повторно использовать очереди обратного вызова между запросами, в соответствии с приведенным выше руководством RabbitMQ, создание новой очереди обратного вызова для каждого запроса неэффективно (RabbitMQ может не справиться даже при использовании функции TTL очереди).
Обычно на каждый запрос сервлета будет приходиться только 1-2 RPC-вызова, но, очевидно, много запросов сервлета в секунду.
Я не думаю, что могу разделить очереди обратного вызова между потоками, поэтому я хотел бы иметь по крайней мере по одной на каждый поток веб-работника.
Моей первой идеей было сохранить очередь обратных вызовов в ThreadLocal, но это может привести к утечкам памяти.
Моя вторая идея состояла в том, чтобы сохранить их в сеансе, но я не уверен, что они будут сериализованы должным образом, и мои сеансы в настоящее время не реплицируются / не передаются между веб-серверами, так что это ИМХО не является хорошим решением.
Моя инфраструктура - Tomcat / Guice / Stripes Framework.
Любые идеи, что самое надежное / простое решение?
Я что-то упускаю во всем этом подходе и, следовательно, слишком усложняю вещи?
Примечание 1 - Этот вопрос относится к общему экономическому обоснованию, описанному здесь - см. Вариант 1.
Примечание 2. Существует, по-видимому, связанный с этим вопрос, как настроить RPC RabbitMQ в веб-контексте, но в основном он касается правильного отключения потоков, созданных клиентом RabbitMQ.