Java Wildfly 10上ActiveMQ Artemis的WebSocket/STOMP不工作

Java Wildfly 10上ActiveMQ Artemis的WebSocket/STOMP不工作,java,websocket,spring-websocket,wildfly-10,activemq-artemis,Java,Websocket,Spring Websocket,Wildfly 10,Activemq Artemis,我正在使用SpringWebSockets实现一个WebSockets应用程序 作为STOMP代理,我想使用Wildfly的Artemis(activemq) 我在standalone-full.xml中进行了以下配置: 添加以下接受程序: <acceptor name="stomp-acceptor" factory-class="org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory"

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

作为STOMP代理,我想使用Wildfly的Artemis(activemq)

我在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>
    
这在启动时似乎效果良好:

16:57:13890信息[org.apache.activemq.artemis.core.server] (ServerService线程池--64)AMQ221020:已在启动接受程序 本地主机:61613用于协议[STOMP]16:57:13892信息 [org.apache.activemq.artemis.core.server](服务器服务线程池 --64)AMQ221007:服务器现在处于活动状态

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

template.convertAndSend(topic, payload);
我得到了错误

错误 [org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler] (reactor-tcp-io-1)收到错误{消息=[AMQ339001:目标 不存在:/topic/abc/12345/xyz]} 会话=系统


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

在我的例子中,有两个问题导致了此错误消息:

(一) 第一个问题是主题的名称并不是以“jms.topic”开头的,但是Artemis似乎期望这样(无论出于什么原因…)

通过将代码更改为

template.convertAndSend("jms.topic." + topic, payload);
我可以解决这个问题

请注意,还需要更改StompBrokerReplay配置:

 config.enableStompBrokerRelay("jms.topic")
2) 这个应用程序现在可以工作了,但当我有几个客户机和一个取消订阅该主题时,错误再次出现。此错误及其解决方案(对Artemis 1.3的升级)如下所述:

建议将“主机”参数添加到stomp接收器。否则无法从其他主机访问它,因为“主机”的默认值为localhost:(替换为服务器的IP地址)
 config.enableStompBrokerRelay("jms.topic")