2017-01-27 52 views
0

我使用Spring來設置踐踏服務器端點(擴展AbstractWebSocketMessageBrokerConfigurer)使用的RabbitMQ跺腳適配器在不同的服務器上

@Override 
public void configureMessageBroker(MessageBrokerRegistry config) { 
     config.enableStompBrokerRelay("/topic","/queue") 
     .setRelayHost(<rmqhost>); 
} 
@Override 
public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/myapp/websockets").setAllowedOrigins("*"); 
} 

的目的是,我可以有多個服務器和客戶端將連接到中繼跨訂閱消息對於一個特定的主題它們中的任何一個:/主題/主題的ID-1

任何服務器(一次)可以發送郵件使用Spring的SimpMessagingTemplate

messagingTemplate.convertAndSend(destination, message); 
0123這個話題

where destination =「/ topic/topic-id-1」。 例如:我有2個服務器節點和一個客戶端連接到它們中的每一個,訂閱同一主題(/ topic/topic-id-1)。目標是如果服務器1發送topic-id-1的消息,它應該通過rabbitmq中繼給訂閱相同主題的兩個客戶端。我看到一個使用路由鍵創建的隊列爲「topic-id-1」,但只有連接到發送消息的服務器的客戶端明確接收它。我在這裏錯過了什麼嗎?是不是RMQ stomp代理應該通過一臺服務器發送消息來發送訂閱,跨同一主題的所有訂閱?服務器是否需要做其他事情來獲取其他節點發送的消息?

回答

0

我不確定這是否完全一樣,但我只是解決了一個非常類似的問題。我在這裏發佈了我的答案:Sending STOMP messages from other layers of an application

我決定將中繼服務器的實現拆分爲它自己的設置,然後在rabbitmq服務器和每個服務器上的websocket訂戶之間手動轉發消息。

希望這可以對你有一些用處。

相關問題