2015-09-04 43 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,则将该消息存储在数据库中。

当用户重新连接时,检查数据库以查看是否有任何消息等待该用户并在该点发送它们。