Apache Camel - обмен Netty TCP застрял при получении ответа ACK - PullRequest
0 голосов
/ 23 октября 2019

При использовании Spring Apache Camel для обработки моего взаимодействия между двумя системами я столкнулся с проблемой получения текстового TCP-ответа от сервера при использовании компонента netty. Мое определение маршрута выглядит следующим образом:

<route id="myRoute">
    <from uri="activemq:myQueue?concurrentConsumers=1&amp;maxConcurrentConsumers=1" />
    <log message="Sending message with body: ${body}" />
    <toD uri="netty:tcp://${headers.hostAddressMessageHeader}:${headers.hostPortMessageHeader}?sync=true&amp;textline=true&amp;clientMode=true&amp;exchangePattern=InOut"></toD>
    <log message="Received response from server: ${body}" />
</route>

Я использую динамическую конечную точку «to», которая отправляет сообщение на указанный IP-адрес и порт, которые хранятся в виде заголовков в этих сообщениях

Во время отправкисообщение без ответа (sync = false) все работает нормально. Однако мне нужно перехватить ответ, который является сфабрикованным сообщением типа ACK с сервера.

Просматривая журналы сервера, на который я отправляю запросы, я вижу, что ACK был отправлен. Тем не менее, мой верблюд все еще говорит мне, что есть обмен в полете. Он не вылетает, он вообще не выдает никаких исключений, он просто застрял там до тех пор, пока я не остановлю один из серверов.

Я не написал никакой специальной реализации конфигурации netty. Я использую базовую конфигурацию, предоставляемую netty lib.

...