以下是我的套接字服务器配置。我想定义一个备用/故障转移端口。
如果当前端口已经在使用中,我如何重试套接字bean的创建(例如,使用后备端口)?
如果故障转移端口也已经在使用:我如何才能重试套接字创建,直到成功(例如5分钟)?
@Bean
public TcpConnectionFactoryFactoryBean factory() {
TcpConnectionFactoryFactoryBean f = new TcpConnectionFactoryFactoryBean();
f.setType("server");
f.setPort(port); //I want to retry and switch that port
f.setUsingNio(true);
f.setSingleUse(false);
f.setDeserializer(deserializer);
f.setSerializer(serializer);
return f;
}
@Bean
public TcpInboundGateway server(
TcpConnectionFactoryFactoryBean factory,
MessageChannel serverChannel) throws Exception {
TcpInboundGateway g = new TcpInboundGateway();
g.setConnectionFactory(factory.getObject());
g.setRequestChannel(serverChannel);
return g;
}
答案 0 :(得分:2)
Spring提供了一个名为ci_session
的实用程序类,该类提供了一些使用套接字的方法。
一个对您有用的是SocketUtils.html#findAvailableTcpPort,它需要输入参数SocketUtils
和minPort
,并将为您返回范围为 [minPort]的可用tcp端口。 ,maxPort] 。您可以为端口调用此方法,如果它们是连续的,则可以使用该方法返回的端口。如果端口不连续,则需要将返回的端口与您的端口进行匹配。
maxPort
答案 1 :(得分:0)
侦听端口0更为可靠,以便操作系统选择可用端口。