Я хочу проверить состояние адаптера TCP (фабрика соединений клиент / сервер), подключен адаптер или нет.
Этот вопрос опубликован в продолжение этого Вопроса , нос некоторыми другими проблемами.
После изменения имени метода: с: isConnected()
на isClientModeConnected()
Мне нужно изменить определение компонента управления Bus Bean. Ранее ни один выходной канал не был настроен, следовательно, его выдачаошибка
@Bean
public IntegrationFlow controlBus() {
return IntegrationFlowDefinition::controlBus;
}
Теперь,
@Bean
public IntegrationFlow controlBusFlow() {
return IntegrationFlows.from(directChannel())
.controlBus().channel(directChannel()).handle(System.out::println)
.get();
}
, мой командный метод управления шиной теперь,
public boolean isConnectionAdapterConnected(String connectionName) {
MessageChannel controlChannel = ac.getBean("controlBusFlow.channel#0", MessageChannel.class);
String exp = "@"+connectionName+"adapter"+".isClientModeConnected()";
boolean status = controlChannel.send(new GenericMessage<String>(exp));
return status;
}
- независимо от того, подключен он или нет, всегдавернуть true в методе состояния
isConnectionAdapterConnected(String connectionName)
. - Но мой активатор службы в определении bean-компонента controlbusflow состоит из сообщения с действительным правильным статусом, это означает, что вышеуказанный статус не является статусом адаптера, фактический статус получен в сервисеактиватор, определенный в bean-компоненте controlBusFlow,
Я создал API, в котором пользователь вызывает функцию, чтобы проверить состояние адаптера, подключен ли онcted или нет.
Проблема:
- Как настроить приложение так, чтобы оно возвращало статус adpater из метода
isConnectionAdapterConnected(String connectionName)
, когда пользователь вызывает этот метод в качестве действительного состоянияПолучено в активаторе службы определения beanflow bean. - Кроме того, как проверить состояние адаптера TCP, если фабрика соединений с сервером находится в подключенном состоянии, или нет, так как этот метод предназначен только для адаптера TCP с фабрикой клиентских соединений
РЕДАКТИРОВАТЬ
С помощью appraoch, определенного г-ном Артемом Биланом, первая проблема решена.
Но для второй проблемы:
Это поток интеграции, который регистрируется во время выполнения с уникальным идентификатором.
IntegrationFlow flow =
IntegrationFlows.from(Tcp.inboundAdapter(Tcp.netServer(port)
.serializer(customSerializer)
.deserializer(customSerializer)
.id(connectionName+"server").soTimeout(10000)))
.enrichHeaders(f->f.header("abc","abc")))
.channel(directChannel())
.handle(Jms.outboundAdapter(ConnectionFactory())
.destination("jmsInbound"))
.get();
theFlow =this.flowContext.registration(flow).id(connectionName+".flow").register();
Вышеуказанный поток регистрируется с уникальным идентификатором, предположим, что создано 3 сервера, тогда будут зарегистрированы 3 вышеупомянутых потока (итерация вышеупомянутого потока 3 раза в цикле for), так как я могу получить ссылку AbstractServerConnectionFactory
из зарегистрированного потока, чтобы я мог получить openConnectionIds
.