繁体   English   中英

我们可以使用 Web-Sockets 进行微服务之间的通信吗?

[英]Can we use Web-Sockets for Communication between Microservices?

我们有一个用例,其中有两个微服务,微服务Microservice A将长时间运行的任务推送到微服务Microservice B

Microservice B开始处理任务,并不断更新任务的状态。 现在微服务Microservice A必须不断轮询微服务Microservice B以获取任务状态的更新。

我们当前的设置中没有队列。

因此,我们想到在微服务Microservice A和微服务Microservice B之间创建一个web socket ,以便微服务 B 可以将状态更新推送到微服务Microservice A 这种设计是否违反了Web sockets任何原则,并且与恒定轮询相比,它是否是一种更好的方法?

最推荐的选项是添加一个队列:

  • 这将减少微服务 A 和微服务 B 之间的耦合
  • 这将允许微服务 C 也对任务状态/结果感兴趣,而无需对微服务 B 进行任何更改

如果你仍然使用 websocket,你将不得不考虑可扩展性(如果你有两个 MicroserviceB 实例,调用哪个实例),失败(如果一个服务失败怎么办,谁重新运行套接字......),和其他一些人。 这就是为什么它不是在微服务环境中进行异步调用的最佳选择。

如果你想走这条路——我建议更好的方法是转移焦点,这样你就有一个中央 websockets“服务器”,你的微服务直接连接到彼此。 然后你基本上是在复制其他架构是如何做到这一点的,无论是 RabbitMQ 还是 Kafka 等

Apache Pulsar 能够作为消息代理工作,并有一个 WS 接口用于发送消息和侦听主题。 我自己还没有尝试过……但我将测试使用它来发送和侦听不同类型微服务中的事件。 Pulsar 本身是可扩展的,允许持久的消息传递,例如可以在 Kubernetes 上安装和执行。 但我只读过它......现在我必须自己尝试:)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM