gpt4 book ai didi

java - 如何通过Spring集成重试套接字服务器的创建?

转载 作者:行者123 更新时间:2023-12-03 11:52:51 27 4
gpt4 key购买 nike

以下是我的套接字服务器配置。我想定义一个备用/故障转移端口。

如果当前端口已在使用中,如何重试套接字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;
}

最佳答案

Spring提供了一个名为SocketUtils的实用程序类,该类提供了一些使用套接字的方法。

对您有用的是SocketUtils.html#findAvailableTcpPort,它接受输入参数minPortmaxPort,并将为您返回范围为[minPort,maxPort]的可用tcp端口。您可以为端口调用此方法,如果它们是连续的,则可以使用该方法返回的端口。如果端口不连续,则需要将返回的端口与您的端口进行匹配。

@Bean
public TcpConnectionFactoryFactoryBean factory(LengthHeaderDeserializer deserializer) throws Exception {
CompletableFuture.runAsync(() -> waitForSocket(port)).get(5, TimeUnit.MINUTES);

TcpConnectionFactoryFactoryBean fact = new TcpConnectionFactoryFactoryBean();
....
}

private void waitForSocket(int port) {
do {
try {
SocketUtils.findAvailableTcpPort(port, port);
return;
} catch (Exception e) {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e1) {
return;
}
}
} while (true);
}

关于java - 如何通过Spring集成重试套接字服务器的创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52813035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com