2017-02-21 108 views
0

我正在使用Spring WebSockets實現一個WebSockets應用程序。Websockets/STOMP與ActiveMQ Artemis Wildfly 10不能正常工作

作爲STOMP代理,我想使用Wildfly的Artemis(Active MQ)。

我確實在獨立-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> 
    
  • 添加新的應用程序用戶來賓/來賓application-users.properties使用add-user.bat

  • 添加以下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] (Server服務線程池 - 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] (反應器 - tcp-io-1)Received ERROR {message = [AMQ339001:Destination does not exist:/ topic/abc/12345/xyz]} session = system

使用Stomp,事先不需要創建主題。我怎麼能告訴Artemis自動創建它?

+0

建議將「主機」參數添加到stomp-acceptor。否則無法從其他主機訪問,因爲「主機」的默認值爲localhost:(用服務器的IP地址替換) –

回答

2

在我的情況下,兩個問題導致此錯誤消息:

1) 的第一個問題是,該主題的名稱沒有開始與「jms.topic」,但阿蒂米斯似乎期待(無論什麼原因......)。

通過代碼更改爲

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

相關問題