Интеграция Spring несколько tcp-подключений к разным серверам

#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-клиентов и маршрутизации к ним.