2015-09-04 88 views
0

我們正在一個項目中使用一些微服務。
我們有一個微服務(A),它獲取和保存數據,並向RabbitMQ發佈消息,聲明新數據已經進入(使用CouchDB _id),以便另一個微服務(b)可以處理它。Node.js + RabbitMQ + Socket.io

問題出在第三個服務,我們有一個需要在'實時'更新的前端。
我們使用Socket.io進行客戶端更新,但node.js實例也從A獲取更新。

後來是如下:

- RabbitMQ message comes in 
- Order is being retrieved from A (HTTP Request) 
- Data is processed (remapping for user interface, bla bla bla) 
- Data is sent through Socket.io to the client. 

我的問題是,我怎麼在節點做乾淨?

我想拆分文件(ofcourse),使每個模塊自己創建一個處理程序,它'知道'RabbitMQ和Socket.io,因此它可以處理數據並在客戶端發送消息時備份隊列已經完成了需要處理的數據以及其他方式。

如果需要更多信息,請告訴我。

+0

不確定你在問什麼?你不能根據事件區分任務嗎? socket.io具有「連接」,「離開」等消息,然後可以解析爲api模塊。你甚至可以在調用前加上消息,即'io_join',然後在你的api模塊中,你可以使用一個對象來處理不同的事件消息。 – Data

+0

問題是我不知道誰不讓RabbitMQ和Socket.io互相「知道」,但只知道處理程序 – CreasolDev

+0

傳入的HTTP請求和來自socket.io的套接字之間的引用是什麼?如果沒有參考,數據應該如何發送到正確的套接字客戶端?我想通過socket.io來訂購,而不是HTTP請求將是更好的選擇,然後... – Tobi

回答

0

利用RabbitMQ和Socket.io之間的Web服務器。

當消息完成處理並準備交付給用戶時,Web服務器可以使用socket.io檢查用戶是否在線。如果是,則將該消息發送給用戶。如果它們當前沒有連接到socket.io,則將該消息存儲在數據庫中。

當用戶重新連接時,檢查數據庫以查看是否有任何消息等待該用戶並在該點發送它們。