如何在 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();
});
};
}
现在我正在使用下面的代码为单端口启动套接字连接,我该如何动态地为多端口实现它?
@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();
});
};
}