语言:Spring Boot,JS
概述 :我正在我的应用程序中实现服务器发送事件功能,该功能将部署在云代工厂中,
其中基于队列中的新消息(我已在我的微服务中订阅),我将向我的客户端/浏览器(使用 EventSource)发送一些更新。
为此,我在我的服务器端维护一个 SseEmitters 列表(用于维护所有 Activity 的 SseEmitter)。一旦我从队列中收到一条新消息,基于 id(队列消息中的一个字段),我会将消息发送到相应的客户端。
问题 : 当我通过创建 来扩展我的应用程序时,上述方案将如何工作多个实例 其中。由于只有一个实例会收到新的队列消息, 可能会发生。活跃的 SseEmitter 在该特定情况下未维护,我该如何解决?
最佳答案
为了解决这个问题,可以观察以下方法。
DNS 概念
如果您考虑一下,知道您的用户(SSE Emitter)在哪里,就像知道某个网站在哪里一样。您可以使用 DNS-look-alike 协议(protocol)来确定您的用户在哪里。协议(protocol)如下:
消息路由概念
如果您使用消息中间件在微服务之间进行通信,则可以使用 AMQP 协议(protocol)提供的路由功能。协议(protocol)如下:
在像 RabbitMQ 这样的现代 AMQP 代理上,绑定(bind)不是资源密集型的。
您的问题很老,如果您现在还没有弄清楚,希望这会有所帮助。
关于java - 如何在微服务的多个实例之间维护 SseEmitters 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53829046/