У меня есть входящая конечная точка TCP, которая ссылается на TCP-коннектор. Это конечная точка запроса-ответа. Клиент TCP является сторонним приложением, которое отправляет запросы только на один сокет. Вот как я установил конечную точку TCP. Endpoint:Входящая конечная точка TCP - Mule ESB - многопоточность
<tcp:inbound-endpoint exchange-pattern="request-response"
responseTimeout="10000" doc:name="TCP" address="${Endpoint}" encoding="ISO-8859-1" connector-ref="TCP"/>
Разъем:
<tcp:connector name="TCP" doc:name="TCP connector"
clientSoTimeout="${Client_SO_Timeout}" receiveBacklog="0" receiveBufferSize="0"
sendBufferSize="0" serverSoTimeout="${Server_SO_Timeout}" socketSoLinger="0"
validateConnections="true" keepAlive="true" sendTcpNoDelay="true">
<receiver-threading-profile maxThreadsActive="${TCP_MaxThreadsActive}" maxThreadsIdle = "${TCP_MaxThreadsIdle}" />
<reconnect-forever />
<service-overrides messageReceiver="CustomMessageReceiver" />
<tcp:custom-protocol ref="CustomLengthProtocol" />
</tcp:connector>
поток работает нормально. Но когда необходимо обрабатывать параллельные запросы, последние несколько запросов синхронизируются. Я понимаю, что сообщения ожидаются в обрабатываемом приемнике (поскольку используется только один сеанс TCP) до тех пор, пока предыдущий запрос не будет завершен потоком мула.
Чтобы настроить это, я ищу способ изменить поток мула, как показано ниже: После получения запросов от клиента мне нужно отправить его в поток мула, который может обрабатывать его асинхронно и нажать ответ на тот же сокет. Как только запрос будет получен в конечной точке, ему не нужно ждать завершения потока предыдущего запроса до обработки следующего запроса. Нет требования сохранять последовательность запросов/ответов от потока мула. Есть ли способ достичь этого, расширив функциональность конечной точки мула TCP? Это похоже на стратегию обработки очереди асинхронного потока, за исключением того, что ответ должен быть отправлен обратно в исходный TCP-сокет.