1

我正在使用 Spring WebSockets 实现一个 WebSockets 应用程序。

作为 STOMP 经纪人,我想使用 Wildfly 的 Artemis (Active MQ)。

我在standalone-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>
    
  • 使用 add-user.bat 将新的应用程序用户 guest/guest 添加到 application-users.properties

  • 添加以下 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:13,890 INFO [org.apache.activemq.artemis.core.server](ServerService 线程池 -- 64)AMQ221020:在 localhost:61613 开始接受协议 [STOMP] 16:57:13,892 INFO [org.apache .activemq.artemis.core.server] (ServerService 线程池 -- 64) AMQ221007:服务器现已上线

但是,我使用 Spring 的 SimpMessagingTemplate 发送第一条消息:

template.convertAndSend(topic, payload);

我得到错误

错误 [org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler] (reactor-tcp-io-1) 收到错误 {message=[AMQ339001: 目标不存在:/topic/abc/12345/xyz]} session= system

使用 Stomp,不必事先创建主题。我如何告诉 Artemis 自动创建它?

4

1 回答 1

3

就我而言,有 2 个问题导致了此错误消息:

1)第一个问题是主题的名称不是以“jms.topic”开头的,但Artemis似乎期望这一点(无论出于何种原因......)。

通过将代码更改为

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

于 2017-02-24T10:25:32.347 回答