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

时间:2018-10-15 08:56:42

标签: java spring sockets spring-boot spring-integration

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

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

2 个答案:

答案 0 :(得分:2)

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

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

maxPort

答案 1 :(得分:0)

侦听端口0更为可靠,以便操作系统选择可用端口。