Affects: \ 5.1.13

Waiting for an indefinite minute, encountering such a mistake a["ERROR\nmessage:Connection to broker closed.\ncontent-length:0\n\n\u0000"] come from webpage.

backend log: 2024-05-22 09:43:15.624 DEBUG [tcp-client-loop-nio-6] r.n.r.PooledConnectionProvider - [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613] Channel cleaned, now 1 active connections and 1 inactive connections 2024-05-22 09:43:15.624 DEBUG [tcp-client-loop-nio-6] r.n.r.PooledConnectionProvider - [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613] Channel closed, now 1 active connections and 0 inactive connections 2024-05-22 09:43:15.624 DEBUG [tcp-client-loop-nio-6] reactor.netty.ReactorNetty - [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613] Non Removed handler: StompMessageDecoder, context: ChannelHandlerContext(StompMessageDecoder, [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613]), pipeline: DefaultChannelPipeline{(reactor.left.onChannelReadIdle = reactor.netty.ReactorNetty$InboundIdleStateHandler), (StompMessageDecoder = org.springframework.messaging.tcp.reactor.ReactorNettyTcpClient$StompMessageDecoder), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2024-05-22 09:43:15.624 DEBUG [tcp-client-loop-nio-6] reactor.netty.ReactorNetty - [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613] Non Removed handler: reactor.left.onChannelReadIdle, context: ChannelHandlerContext(reactor.left.onChannelReadIdle, [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613]), pipeline: DefaultChannelPipeline{(reactor.left.onChannelReadIdle = reactor.netty.ReactorNetty$InboundIdleStateHandler), (StompMessageDecoder = org.springframework.messaging.tcp.reactor.ReactorNettyTcpClient$StompMessageDecoder), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2024-05-22 09:43:15.625 DEBUG [tcp-client-loop-nio-6] r.n.r.PooledConnectionProvider - [id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613] onStateChange(ChannelOperations{PooledConnection{channel=[id: 0xad634737, L:/10.1.201.30:54553 ! R:/192.168.175.12:61613]}}, [disconnecting]) 2024-05-22 09:43:15.625 DEBUG [tcp-client-scheduler-6] o.s.m.s.s.StompBrokerRelayMessageHandler - TCP connection to broker closed in session mpw022x1


    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableStompBrokerRelay("/topic", "/queue", "/temp-queue/", "/amq/queue", "/exchange")
                .setAutoStartup(true)
                .setRelayHost(stompCfg.getRelayHost())
                .setRelayPort(stompCfg.getRelayPort())
                .setVirtualHost(stompCfg.getVirtualHost())
                .setClientLogin(stompCfg.getClientLogin())
                .setClientPasscode(stompCfg.getClientPasscode())
                .setSystemLogin(stompCfg.getSystemLogin())
                .setSystemPasscode(stompCfg.getSystemPasscode()).setSystemHeartbeatSendInterval(60000L).setSystemHeartbeatReceiveInterval(60000L)
                .setUserDestinationBroadcast("/topic/unresolved-user-destination")
                .setUserRegistryBroadcast("/topic/simp-user-registry")
                .setTcpClient(initTcpClient(stompCfg.getRelayHost(),stompCfg.getRelayPort()));

              //  initTcpClient(stompCfg.getRelayHost(),stompCfg.getRelayPort()));
        config.setApplicationDestinationPrefixes("/app");

    }

    private ReactorNettyTcpClient<byte[]> initTcpClient(String relayHost,int relayPort ) {
        StompDecoder decoder = new StompDecoder();
        ReactorNettyCodec<byte[]> codec = new StompReactorNettyCodec(decoder);
        ReactorNettyTcpClient<byte[]> client = new ReactorNettyTcpClient<>(tcpClient -> tcpClient
                .host(relayHost)
                .port(relayPort)
        , codec);
        client.setLogger(SimpLogging.forLog(client.getLogger()));
        return client;
    }


    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        //HeartbeatTime
        registry.addEndpoint("/qa-ws").setAllowedOrigins("*").withSockJS().setHeartbeatTime(20000L)
               .setWebSocketEnabled(true);
    }

    @Override
    public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
        registration.setSendTimeLimit(10 * 1000).setSendBufferSizeLimit(512 * 1024);
    }

    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxTextMessageBufferSize(8192);
        container.setMaxBinaryMessageBufferSize(8192);
        //最大空闲时间60秒
        container.setMaxSessionIdleTimeout(60000L);

        return container;
    }

Is there any mistake? Looking forward to your reply.

Comment From: snicoll

Thanks for getting in touch, but it feels like this is a question that would be better suited to Stack Overflow. As mentioned in the guidelines for contributing, we prefer to use the issue tracker only for bugs and enhancements. Feel free to update this issue with a link to the re-posted question (so that other people can find it) or add some more details if you feel this is a genuine bug.

Comment From: jikuanyu

Isn't that a problem?

Comment From: jikuanyu

//here I add ,No close will occur. Experienced experts, can you tell me if this is okay? connection.onWriteInactivity(() ->


@Override
        public void afterConnected(TcpConnection<byte[]> connection) {
            if (logger.isDebugEnabled()) {
                logger.debug("TCP connection " + connection + " opened in session=" + getSessionId());
            }
            this.tcpConnection = connection;
            connection.onReadInactivity(() -> {
                if (this.tcpConnection != null && !this.isStompConnected) {
                    handleTcpConnectionFailure("No CONNECTED frame received in " +
                            MAX_TIME_TO_CONNECTED_FRAME + " ms.", null);
                }
            }, MAX_TIME_TO_CONNECTED_FRAME);
            connection.sendAsync(MessageBuilder.createMessage(EMPTY_PAYLOAD, this.connectHeaders.getMessageHeaders()));


                //here I add ,No close will occur. Experienced experts, can you tell me if this is okay?
   connection.onWriteInactivity(() ->
                        connection.send(HEARTBEAT_MESSAGE).addCallback(
                                result -> {},
                                ex -> handleTcpConnectionFailure(
                                        "Failed to forward heartbeat: " + ex.getMessage(), ex)), interval);


        }`
`