簡體   English   中英

“消息:經紀人不可用。” 在 spring websocket 上執行 stomp 時出錯

[英]"message:Broker not available." error when implementing stomp over spring websocket

我正在使用 spring WebSocket、SockJs 和 Amazon MQ 構建示例聊天應用程序。 當客戶端訂閱主題時,它會拋出“代理不可用”異常。 所有入站流量規則都在 AWS 安全組中正確設置,並且代理也有 stomp 支持。 我正在關注這個Spring 指南

如果我使用內存代理,它工作正常。 非常感謝您對此的幫助,下面是示例代碼。

Broker:Amazon MQ(內部使用 Active MQ)

版本:5.15.0

WebSocketConfig.java

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {

    registry.enableStompBrokerRelay("/topic")
            .setRelayHost("***********.mq.us-east-2.amazonaws.com").setRelayPort(61614)
            .setClientLogin("******").setClientPasscode("*****");

    registry.setApplicationDestinationPrefixes("/app");

}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {

    registry.addEndpoint("/chat-endpoint").withSockJS();
}

應用程序啟動日志

.......
INFO 14280 --- [alina-utility-1] o.s.m.s.s.StompBrokerRelayMessageHandler : Starting...

INFO 14280 --- [alina-utility-1] o.s.m.s.s.StompBrokerRelayMessageHandler : Starting "system" session, StompBrokerRelay[ReactorNettyTcpClient[reactor.netty.tcp.TcpClientDoOn@7acb7b3e]]

INFO 14280 --- [alina-utility-1] o.s.m.s.s.StompBrokerRelayMessageHandler : Started.
......

客戶

var socket = new SockJS('/chat-endpoint');
    stompClient = Stomp.over(socket);

    stompClient.connect({}, function(frame) {

        setConnected(true);
        stompClient.subscribe('/topic/message', function(message) {
                                   displayMessage(message); });

});

瀏覽器控制台日志

打開 Web 套接字... Web 套接字打開... CONNECT 接受版本:1.1,1.0 心跳:10000,10000

錯誤消息:經紀人不可用。 內容長度:0

stomp.min.js:8 糟糕! 失去與http://localhost:8080/testApp/chat-endpoint 的連接

我有同樣的問題。 為了修復它,我稍微更改了 configureMessageBroker 方法:

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        ReactorNettyTcpClient<byte[]> client = new ReactorNettyTcpClient<>(tcpClient -> tcpClient
                .host("your-amazon-mq-host.amazonaws.com")
                .port(61614)
                .secure(SslProvider.defaultClientProvider()), new StompReactorNettyCodec());

        registry.setApplicationDestinationPrefixes("/app");
        registry.enableStompBrokerRelay("/queue", "/topic")
                .setAutoStartup(true)
                .setSystemLogin("amazonmq-login")
                .setSystemPasscode("amazonmq-pass")
                .setClientLogin("amazonmq-login")
                .setClientPasscode("amazonmq-pass")
                .setTcpClient(client);
    }

你好,我知道如何修復它,好的 你不應該安裝 stomp 插件 cd /opt/homebrew/opt/rabbitmq/sbin/ rabbitmq-plugins enable rabbitmq_stomp rabbitmq-plugins enable rabbitmq_web_stomp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM