При использовании Spring Apache Camel для обработки моего взаимодействия между двумя системами я столкнулся с проблемой получения текстового TCP-ответа от сервера при использовании компонента netty. Мое определение маршрута выглядит следующим образом:
<route id="myRoute">
<from uri="activemq:myQueue?concurrentConsumers=1&maxConcurrentConsumers=1" />
<log message="Sending message with body: ${body}" />
<toD uri="netty:tcp://${headers.hostAddressMessageHeader}:${headers.hostPortMessageHeader}?sync=true&textline=true&clientMode=true&exchangePattern=InOut"></toD>
<log message="Received response from server: ${body}" />
</route>
Я использую динамическую конечную точку «to», которая отправляет сообщение на указанный IP-адрес и порт, которые хранятся в виде заголовков в этих сообщениях
Во время отправкисообщение без ответа (sync = false) все работает нормально. Однако мне нужно перехватить ответ, который является сфабрикованным сообщением типа ACK с сервера.
Просматривая журналы сервера, на который я отправляю запросы, я вижу, что ACK был отправлен. Тем не менее, мой верблюд все еще говорит мне, что есть обмен в полете. Он не вылетает, он вообще не выдает никаких исключений, он просто застрял там до тех пор, пока я не остановлю один из серверов.
Я не написал никакой специальной реализации конфигурации netty. Я использую базовую конфигурацию, предоставляемую netty lib.