【问题标题】:Node.js + RabbitMQ + Socket.ioNode.js + RabbitMQ + Socket.io
【发布时间】:2015-11-30 14:57:37
【问题描述】:

我们正在进行一个包含一些微服务的项目。
我们有一个微服务 (A),它获取并保存数据并向 RabbitMQ 发布一条消息,说明新数据已进入(使用 CouchDB _id),以便另一个微服务 (b) 可以处理它。

问题在于第三个服务,我们有一个需要“实时”更新的前端。
我们使用 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.

我的问题是,我如何在节点中干净地做到这一点?

我想拆分文件(当然),让每个文件成为自己的模块并创建一个“知道”RabbitMQ 和 Socket.io 的处理程序,以便它可以处理数据并在客户端有消息时将消息发送回队列对需要处理的数据进行处理,反之亦然。

如果需要更多信息,请告诉我。

【问题讨论】:

  • 不确定您在问什么?您不能根据事件区分任务,例如socket.io 有“加入”、“离开”等消息,然后可以将其解析为 api 模块。您甚至可以为调用添加消息前缀,即“io_join”,然后在您的 api 模块中,您可以使用对象来处理不同的事件消息。
  • 问题是我不知道谁不让RabbitMQ和Socket.io“认识”对方,但只知道处理程序
  • 传入的 HTTP 请求和来自 socket.io 的套接字之间的引用是什么?如果没有参考,数据应该如何发送到正确的套接字客户端?我想通过 socket.io 而不是 HTTP 请求来订购会是更好的选择......

标签: javascript node.js socket.io rabbitmq microservices


【解决方案1】:

利用 RabbitMQ 和 Socket.io 之间的 Web 服务器。

当消息完成处理并准备好发送给用户时,Web 服务器可以使用 socket.io 来检查用户是否在线。如果是,则将消息发送给用户。如果它们当前未连接到 socket.io,则将消息存储在数据库中。

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

【讨论】:

    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 2011-12-02
    • 2011-03-28
    • 2012-09-19
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多