2016-03-04 16 views
7

我可以使用SimpMessagingTemplate#convertAndSendToUserSimpMessagingTemplate#convertAndSend方法向消息代理髮送消息,而無需使用@EnableWebSocketMessageBroker設置websocket消息代理?在不創建Web套接字消息代理的情況下使用SimpMessagingTemplate Spring 4

我試圖做的是利用一個WebSocket的服務器,爲兩個應用服務器實例(一個彈簧4和一個彈簧3)提供消息。我使用Spring 4創建了一個Web服務器,Spring啓動加上websocket消息代理。

現在我想兩個應用程序服務器將郵件推到RabbitMQ的,因此將它們廣播給訂閱了它的客戶。

我面臨的第一個問題是,如果沒有可用的websockt消息代理配置,SimpMessagingTemplate將不會自動掛接到應用程序上下文。我無法在沒有創建WebSocket消息板的情況下注入它。

請幫我看看這是否可能。

BTW我有一個previous question解答與此相關的。

+0

我認爲要消息發送到像RabbitMQ的經紀人,你不應該使用'SimpMessagingTemplate'但'RabbitTemplate' –

+0

是的,這應該是通用的情況。我們應該能夠直接推送到rabbitmq隊列。在Spring websocket那個部分已經隱藏了一些地方。無法弄清楚什麼是隊列名等等。當消息代理被配置時,它提供了一個'SimpMessagingTemplate'類的bean和兩個將消息推送給消息代理的方法。 –

回答

1

那麼,閱讀大量的文檔後,我自己找到了答案。關鍵是這個架構如下。

enter image description here

在此架構中彈簧充當用於所述消息代理和客戶機之間的通信的網關。 Spring不做任何事情(除了必要時),但是將請求轉發給消息代理(STOMP消息)。 Spring上的配置定義了一些重要的事情。一個是交換機和其他路由密鑰。 Spring配置爲我們提供了一個抽象層,因此我們無需大驚小怪地訂閱消息代理並將消息推送到消息代理。

SimpMessagingTemplate是我們用來與消息代理進行通信的抽象層。 Spring使用給定的細節創建bean。那麼我無法手動創建SimpMessagingTemplate的實例。我必須將Spring 3應用程序更新到Spring 4才能使用websockets。

由於Spring和消息代理是分離的,聚集應用程序實例不會對消息代理產生任何影響。只有當Spring需要訂閱頻道或者需要向頻道發佈消息時,Spring纔會與消息代理進行通信。因此,如果有兩個訂閱相同通道的實例,它將是兩個使用相同路由密鑰綁定一個交換機的隊列。發佈到通道中的消息將可用於所有訂戶(隊列),因爲它們都使用相同的路由密鑰。有關更詳細的描述,請參閱rabbitmq stop plugin documentation

相關問題