msgstr "сообщение: брокер недоступен."ошибка при реализации stomp через пружинный websocket - PullRequest
0 голосов
/ 05 октября 2019

Я создаю пример приложения для чата с использованием Spring WebSocket, SockJs и Amazon MQ. Выдает исключение «брокер недоступен», когда клиент подписывается на тему. Все правила входящего трафика установлены правильно в группах безопасности AWS, и у брокера также есть поддержка stomp. Я слежу за этим Spring Guide .

Работает нормально, если я использую брокер в памяти. Я очень ценю вашу помощь в этом, и ниже приведен пример кода.

Брокер: 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); });

});

Журнал консоли браузера

Открытие веб-сокета ... Веб-сокет открыт ... ПОДКЛЮЧИТЬ Принять-версия: 1.1,1.0 Пульс: 10000,10000

Сообщение об ошибке: брокер недоступен. content-length: 0

stomp.min.js: 8 К сожалению! Потеряно соединение с http://localhost:8080/testApp/chat-endpoint

1 Ответ

1 голос
/ 14 октября 2019

У меня была такая же проблема. Чтобы исправить это, я немного изменил метод 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...