如何在 spring 启动时使用 TcpNetServerConnectionFactory 动态打开多个端口?

How to open multiple ports dynamically using TcpNetServerConnectionFactory in spring boot?

现在我正在使用下面的代码为单端口启动套接字连接,我该如何动态地为多端口实现它?

 @Bean
 public TcpNetServerConnectionFactory cf() { 
     TcpNetServerConnectionFactory cf = new TcpNetServerConnectionFactory(9999);
     cf.setSingleUse(true);
     cf.setSerializer(codec());
     cf.setDeserializer(codec());
     return cf; 
 }

您可以将 TcpNetServerConnectionFactory 配置为 0 端口。操作系统将为您选择一个随机的可用端口。要获得该端口,您需要执行 getPort()getServerSocketAddress()。有关详细信息,请参阅文档:https://docs.spring.io/spring-integration/reference/html/ip.html#overview.

isListening() 检查可用于等待连接工厂在所选端口上真正准备就绪。

您可以使用 dynamic flow registration 以编程方式创建多个服务器。

@Bean
public ApplicationRunner runner(IntegrationFlowContext context, MessageChannel tcpChannel) {
    return args -> {
        IntStream.of(1234, 1235).forEach(port -> {
            IntegrationFlow flow = IntegrationFlows.from(Tcp.inboundAdapter(Tcp.netServer(port))
                    .outputChannel(tcpChannel))
                    .get();
            context.registration(flow).register();
        });
    };
}