Websockets / STOMP with ActiveMQ Artemis on Wildfly 10 not working

随声附和 提交于 2019-12-08 06:28:15

问题


I am implementing a WebSockets application using Spring WebSockets.

As a STOMP broker, I want to use Wildfly's Artemis (Active MQ).

I did the following configuration in standalone-full.xml:

  • Adding the following acceptor:

    <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>
    
  • add a new application user guest/guest to application-users.properties using add-user.bat

  • add the following StompConfiguration (abbreviated):

    @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");
            }
        }
    

This seems to work well at startup:

16:57:13,890 INFO [org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 64) AMQ221020: Started Acceptor at localhost:61613 for protocols [STOMP] 16:57:13,892 INFO [org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 64) AMQ221007: Server is now live

However, wenn I send the first message using Spring's SimpMessagingTemplate:

template.convertAndSend(topic, payload);

I get the error

ERROR [org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler] (reactor-tcp-io-1) Received ERROR {message=[AMQ339001: Destination does not exist: /topic/abc/12345/xyz]} session=system

Using Stomp, it should not be necessary to create a topic beforehand. How can I tell Artemis to create it automatically?


回答1:


In my case, 2 problems caused this error message:

1) The first problem was that the name of the topic did not start with "jms.topic", but Artemis seems to expect that (for whatever reason...).

By changing the code to

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

I could resolve the problem.

Note that it was also necessary to change the StompBrokerRelay configuration:

 config.enableStompBrokerRelay("jms.topic")

2) The application now worked, but when I had several clients and one unsubscribed from the topic, the error reappeared again. This error and its solution (an upgrade to Artemis 1.3) is described here: How update WildFly 10.1.0Final Apache Artemis 1.1.0 to Apache Artemis 1.3



来源:https://stackoverflow.com/questions/42373649/websockets-stomp-with-activemq-artemis-on-wildfly-10-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!