#tcp #spring-integration
#tcp #spring-интеграция
Вопрос:
Возможно ли настроить динамический TCP-клиент, который может подключаться к нескольким TCP-серверам одновременно? Я использую интеграцию Spring с конфигурацией dsl. Я прочитал несколько других вопросов по этой теме, но не могу найти способ заставить ее работать.
Конфигурация, которую я использую для настройки одного соединения, приведена ниже:
@Configuration
public class TcpAsyncConfig {
MessageHandler handler = new MessageHandler();
@Bean
public AbstractClientConnectionFactory client1() {
return Tcp.netClient("localhost", 6050)
.leaveOpen(true)
.soKeepAlive(true)
.singleUseConnections(true)
.deserializer(new CustomSerializerDeserializer())
.get();
}
@Bean
public IntegrationFlow client1Out(AbstractClientConnectionFactory client1) {
return IntegrationFlows.from(RobotGateways.class)
.handle(Tcp.outboundAdapter(client1))
.get();
}
@Bean
public IntegrationFlow client1In(AbstractClientConnectionFactory client1) {
return IntegrationFlows.from(Tcp.inboundAdapter(client1))
.transform(Transformers.objectToString())
.log(msg -> "client1: " msg.getPayload())
.handle(handler::handleMessage)
.get();
}
@Bean
@DependsOn("client1Out")
public RobotGateways robotGateways(RobotGateways gateways){
return gateways;
}
}
Итак, я хочу создать список подключений и использовать шлюз для отправки сообщений по определенному соединению.
Ответ №1:
AbstractClientConnectionFactory
На самом деле можно подключиться только к одному TCP-серверу. Для подключения к разным серверам у вас должно быть несколько Tcp.netClient()
, соответственно.
Тогда вам, вероятно, потребуется несколько Tcp.outboundAdapter()
Tcp.inboundAdapter()
определений and .
В потоке шлюза, чтобы определить, какому клиенту отправлять, вам нужно взглянуть на route()
where в соответствии с некоторым аргументом вызова шлюза, вы можете решить, куда идти в вашем потоке.
Дополнительные сведения см. в документах:
https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl-routers
https://docs.spring.io/spring-integration/docs/current/reference/html/message-routing.html#messaging-routing-chapter
Комментарии:
1. Смотрите этот пример github.com/spring-projects/spring-integration-samples/tree /… для примера регистрации динамических потоков DSL для TCP-клиентов и маршрутизации к ним.