0

Я использую приложение WebSockets с использованием Spring WebSockets.Websockets/STOMP с ActiveMQ Artemis on Wildfly 10 не работает

Как брокер STOMP, я хочу использовать Artemis Wildfly (Active MQ).

я сделал следующую конфигурацию в автономном-full.xml:

  • Добавление следующей акцептор:

    <acceptor name="stomp-acceptor" 
        factory-class="org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory"> 
        <param name="protocols" value="STOMP" /> 
        <param name="port" value="61613" /> 
    </acceptor> 
    
  • добавить нового пользователя приложения гостя/гостей в application-users.properties используя add-user.bat

  • Добавить следующую функцию StompConfiguration (сокращенно):

    @Configuration 
    @EnableWebSocketMessageBroker 
    public class StompConfiguration extends AbstractWebSocketMessageBrokerConfigurer { 
        @Override 
        public void registerStompEndpoints(StompEndpointRegistry registry) { 
         registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS(); 
        } 
    
        @Override 
        public void configureMessageBroker(MessageBrokerRegistry config) { 
         config.setApplicationDestinationPrefixes("/app"); 
          config.enableStompBrokerRelay("/topic", "/queue").setRelayHost("localhost").setRelayPort(61613) 
          .setClientLogin("guest").setClientPasscode("guest"); 
         } 
        } 
    

Это, кажется, работает хорошо при запуске:

16: 57: 13890 INFO [org.apache.activemq.artemis.core.server] (ServerService бассейн Thread - 64) AMQ221020: Начальный акцептор на localhost: 61613 для протоколов [STOMP] 16: 57: 13,892 INFO [org.apache.activemq.artemis.core.server] (пул потоков ServerService - 64) AMQ221007: теперь сервер работает

Однако Венен я посылаю первое сообщение, используя SimpMessagingTemplate Спринга:

template.convertAndSend(topic, payload); 

Я получаю ошибку

ОШИБКА [org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler] (реактор- ТСР-IO-1) Полученное сообщение ERROR {= [AMQ339001: Пункт назначения не существует:/тема/ABC/12345/хуг]} сессия = система

Использование Stomp, не обязательно создавать тему заранее. Как я могу сказать, что Артемис создал его автоматически?

+0

желательно добавить параметр «хозяин» к топовому акцептору. В противном случае доступ к нему с другого хоста невозможен, поскольку по умолчанию для «хоста» является localhost: (замените его IP-адресом вашего сервера) –

ответ

2

В моем случае, 2 проблемы вызвало сообщение об ошибке:

1) Первая проблема заключалась в том, что название темы было не начать с «jms.topic», но Артемида, кажется, ожидать, что (для любой причины...).

Изменяя код

template.convertAndSend("jms.topic." + topic, payload); 

я мог бы решить эту проблему.

Обратите внимание, что необходимо также изменить конфигурацию StompBrokerRelay:

config.enableStompBrokerRelay("jms.topic") 

2) Теперь приложение работало, но когда у меня было несколько клиентов и один отписался от темы, ошибки снова появился. Эта ошибка и ее решение (обновление до Artemis 1.3) описываются здесь: How update WildFly 10.1.0Final Apache Artemis 1.1.0 to Apache Artemis 1.3