你採用的方法取決於客戶端的信息是多麼敏感。單個主題與選擇器的不利之處在於,任何人都可以在沒有選擇器的情況下訂閱主題,並查看所有人的所有信息 - 通常不是您想要執行的操作。
一個更好的方案是使用消息分發機制(Camel路由集),充當websocket客戶端和產生消息的系統之間的中介。此機制負責將消息從單個目標分發到特定於客戶端的目標。我曾參與過一些使用類似計劃的銀行網絡前端。
爲了這個工作,你首先爲每個用戶生成一個獨特的標記/ UUID;這在會話建立時(通常通過某種配置文件查詢/消息)呈現給用戶。 重要的是,UUID可以作爲clientId的散列來處理,而不是存儲在數據庫中,因爲它將一直使用,並且您希望確保快速完成此操作。
然後用戶使用該信息連接到使用該UUID作爲後綴的特定主題。例如兩個用戶預訂至orderConfirmation
話題將各自認購到自己的版本,話題:
clientA -> orderConfirmation.71jqsd87162iuhw78162wd7168
clientB -> orderConfirmation.76232hdwe7r23j92irjh291e0d
爲了保持「存在」的方式,您的客戶將需要定期發送心跳消息包含它們的clientId到知名的話題,您的分配機制監聽。客戶不應該能夠訂閱此主題的閱讀(請參閱ActiveMQ Security)。消息分發機制需要在內存中保存一個包含clientId和上次看到心跳的時間的數據結構。
當分配機制接收到消息時,它檢查接收消息的客戶端ID是否具有「現場/當前」會話,確定客戶端的UUID,並在適當的主題上廣播消息。
隨着時間的推移,這將在您的經紀商創建大量的話題,您不想在用戶離開時閒逛。您可以將ActiveMQ配置爲delete these if they have been inactive for some time。