我正在使用 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 自动创建它?