实现stomp over spring websocket时出现"消息:代理不可用"错误。

9
我正在使用 Spring WebSocket、SockJs 和 Amazon MQ 构建一个样例聊天应用。当客户端订阅主题时,它会抛出“代理不可用”的异常。所有入站流量规则在 AWS 安全组中都已正确设置,并且代理也具有 STOMP 支持。我遵循了这个 Spring 指南
如果我使用内存代理,则一切正常。非常感谢您的帮助,以下是示例代码。
代理: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 Socket... Web Socket已打开... CONNECT accept-version:1.1,1.0 heart-beat:10000,10000

错误 message:Broker不可用。 content-length:0

stomp.min.js:8 哎呀!与 http://localhost:8080/testApp/chat-endpoint 的连接已丢失。

2个回答

11

我遇到了同样的问题。为了解决它,我稍微修改了 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);
    }

0

你好,我知道如何修复它,没问题。 你不应该安装stomp插件。 输入cd /opt/homebrew/opt/rabbitmq/sbin/。 启用rabbitmq_stomp插件输入:rabbitmq-plugins enable rabbitmq_stomp 启用rabbitmq_web_stomp插件输入:rabbitmq-plugins enable rabbitmq_web_stomp


目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接