client-mode = "true" и retryInterval на входящем адаптере с фабрикой клиентских подключений - PullRequest
0 голосов
/ 10 июня 2018

In spring Документация -> 32.6 TCP-адаптеры упоминается, что мы используем clientMode = "true", тогда входящий адаптер отвечает за соединение с внешним сервером.

У меня естьсоздал поток, в котором TCP-адаптер с клиентской фабрикой соединений устанавливает соединение с внешним сервером, код для потока:

IntegrationFlow flow = IntegrationFlows.from(Tcp.inboundAdapter(Tcp.nioClient(hostConnection.getIpAddress(),Integer.parseInt(hostConnection.getPort()))
             .serializer(customSerializer)
             .deserializer(customSerializer)
             .id(hostConnection.getConnectionNumber())).clientMode(true).retryInterval(1000).errorChannel("testChannel").id(hostConnection.getConnectionNumber()+"adapter"))
             .enrichHeaders(f->f.header("CustomerCode",hostConnection.getConnectionNumber()))
             .channel(directChannel())
             .handle(Jms.outboundAdapter(ConnectionFactory())
             .destination(hostConnection.getConnectionNumber()))
             .get();

     theFlow = this.flowContext.registration(flow).id(hostConnection.getConnectionNumber()+"outflow").register(); 
  • Я создал несколько потоков, перебирая список соединений и перебираяприведенный выше код для цикла for и зарегистрируйте их в flowcontext с уникальным идентификатором.

My clients are created successfully with no issue and then establish there connection as supported by topology.

Issue :

  • Я посчитал количество успешно созданных клиентских подключений, поэтому подсчитал, что 7 клиентских подключений (7 потоков интеграции) были успешно установлены, и они инициируют подключение от себя.

  • , когда ясоздать 8-е клиентское соединение (8-й поток создан и успешно зарегистрирован), но .clientMode(true) не работает, значит клиент не инициирует само соединениепосле первого сбоя означает, что в первый раз попытаться установить соединение при успешном подключении, то нет проблем, но в случае сбоя он не повторяется снова.

  • Также мои другие созданные клиенты, т.е. 7клиентские подключения, которые были успешно созданы, также прекратили инициировать подключение от себя, когда они были отключены.

Примечание : нет проблем с потоком, только для TCP-адаптеров, которые они останавливаютИнициирование соединения

  • Поток создан и зарегистрирован успешно, так как нет проблем, потому что когда я запускаю команду шины управления @adapter_id.retryConnection(), он соединяется с сервером.

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

1 Ответ

0 голосов
/ 10 июня 2018

Одна из возможностей заключается в том, что пул потоков TaskScheduler исчерпан - этого не должно произойти с описанной выше конфигурацией, но это зависит от того, что еще находится в приложении.Возьмите дамп потока (например, jstack), чтобы увидеть, что делают потоки taskScheduler.

См. документацию для получения информации о настройке потоков в планировщике.Однако, если это решит проблему, вы должны выяснить, какие задачи используют потоки планировщика для длинных задач.

Также включите ведение журнала DEBUG, чтобы увидеть, предоставляет ли он какие-либо подсказки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...