在 Wildfly 10 上使用 ActiveMQ Artemis 的 Websockets/STOMP 无法正常工作

Websockets / STOMP with ActiveMQ Artemis on Wildfly 10 not working

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

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

我在standalone中做了以下配置-full.xml:

这似乎在启动时运行良好:

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

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

template.convertAndSend(topic, payload);

我收到错误

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

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

就我而言,有 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