当前位置: 首页 > 知识库问答 >
问题:

"消息:代理不可用."在Spring websocch上实现践踏时出错

赵君植
2023-03-14

我正在使用spring WebSocket、SockJs和Amazon MQ构建一个示例聊天应用程序。当客户端订阅主题时,它会引发“代理不可用”异常。所有入站流量规则都在AWS安全组中正确设置,代理也具有stomp支持。我遵循这个Spring指南。

如果我使用内存代理,它可以正常工作。我非常感谢您在这方面的帮助,下面是示例代码。

代理:Amazon MQ(在内部使用活动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接受版本:1.1,1.0心跳:10000,10000

错误消息:代理不可用。内容长度:0

stomp.min.js: 8哎呀!与http://localhost:8080/testApp/chat-endpoint失去联系

共有1个答案

马晓博
2023-03-14

我也有同样的问题。为了修复它,我稍微更改了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);
    }
 类似资料:
  • 每当我试图将消息从esb发布到消息代理的主题时,我都会收到此错误 我的代理代码是 我的jndi配置和axis 2配置配置正确。我的MB在端口9444上运行,Publisher_esb在端口9443上运行,subscriber esb在端口9446上运行。当我使我的订阅者保持活动状态时,如果我从我的发布者发布一条消息,该消息会反映到订阅者。 从订户获取消息的代码是 当我第一次运行订阅者时,它给了我结

  • 考虑一下如果有需要做gRPC的代理,该如何进行。 nghttpx https://nghttp2.org/documentation/nghttpx.1.html 用于 HTTP/2, HTTP/1 和 SPDY 的反向代理。 结论:看介绍是支持了,有待进一步确认。 GCLB GCLB 指 Google Global Load Balancer, 地址 https://cloud.google.c

  • 在本公司的最后一个项目中:客户提出身份验证等请求,应用程序第一层得到客户请求并在Kafka上生成消息,核心服务消费该消息后向银行服务提出rest请求,得到响应后在Kafka上生成响应消息,应用程序第一层将消息传递给客户。是真的Kafka用例,还是去掉第一层和Kafka,在客户端和核心之间使用rest服务更好。谢谢

  • 我对java中的继承不熟悉,我有以下问题。我的基类是Plane,它的子类是PlaneComponent,PlaneComponent的子类是PasengerCom的。我的程序由11个类组成,当我忽略PasengerCom的类时,一切都是正确的。但是当我运行整个程序时,我收到了这个消息:

  • 我在完整图形拓扑上有一个代理网络,在不同服务器上有3个节点:A,B和C。每个代理都附加了一个生产者,并且出于测试目的,在代理 C 上只有一个非代理使用者。由于我使用的是完整图拓扑,因此每个代理还为其他每个节点都有一个代理使用者。 问题是:A收到一些消息。我希望它将这些消息转发给代理C,该代理连接了一个“真实”消费者。这不会发生,代理A存储这些消息,直到一个“真实”消费者连接到它。 我的配置(或理解