Мой ответ основан на некоторых предположениях. (Я не ждал, что вы ответите на мой комментарий, так как обнаружил, что проблема в любом случае имеет некоторые другие интересные функции.)
нижестоящий партнер отправит HTTP-запрос обратно в нашу систему
Для этого необходим порт прослушивания (ie, сервер), работающий на этой стороне. Этот сервер может быть в той же JVM или другой. Но ...
Этот ответ необходим для того же потока
Это немного сбивает с толку, поскольку на высоком уровне повторное использование потока программно само по себе обычно не является нашим интерес, но повторное использование объекта (независимо от того, в каком потоке). Для повторного использования потоков вы можете рассмотреть возможность использования ExecutorService
. Итак, что вы можете попытаться сделать, я попытался изобразить на этой диаграмме.
Вот шаги:
- «Потребитель элемента очереди» потребляет элемент из очереди и отправляет запрос в нисходящую систему.
- Этот экземпляр «Потребителя элемента очереди» кэшируется для обработки запроса из нисходящей системы.
- Есть прослушиватель, работающий на некотором порте в той же JVM, на которую нисходящая система отправляет свой запрос.
- Прослушиватель направляет этот запрос «правильному» кэшированному экземпляру «Потребитель элемента очереди» ( Вы должны найти способ для этого на основе вашего механизма кэширования). Может быть, какой-то заголовок должен присутствовать в запросе от нисходящей системы, чтобы определить правильный обработчик на этой стороне.
Надеюсь, это работает для вас.