¿Es posible configurar un cliente TCP dinámico que pueda conectarse a varios servidores TCP a la vez? Estoy usando la integración de primavera con la configuración de dsl. He leído algunas otras preguntas sobre este tema, pero no encuentro la manera de hacerlo funcionar.

La configuración que utilizo para configurar una sola conexión a continuación:

@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;
}
}

Entonces quiero crear una lista de conexiones y usar la puerta de enlace para enviar mensajes en una conexión específica.

0
Kevin Bos 22 ene. 2021 a las 15:54

1 respuesta

La mejor respuesta

Un AbstractClientConnectionFactory realmente puede conectarse solo a un servidor TCP. Para hacer conexiones a diferentes servidores, necesita tener varios Tcp.netClient(), respectivamente.

Entonces probablemente necesite tener varias definiciones de Tcp.outboundAdapter() y Tcp.inboundAdapter().

En el flujo de la puerta de enlace, para determinar a qué cliente enviar, debe echar un vistazo a route() donde, de acuerdo con algún argumento de llamada de la puerta de enlace, puede decidir a dónde ir en su flujo.

Consulte los documentos para obtener más información:

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
Artem Bilan 22 ene. 2021 a las 14:23