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

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

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

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

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


慕虎7371278
浏览 218回答 3
3回答

万千封印

最推荐的选项是添加一个队列:这将减少微服务 A 和微服务 B 之间的耦合这将允许同样对任务状态/结果感兴趣的微服务 C 了解它,而无需对微服务 B 进行任何更改如果你仍然选择 websocket,你将不得不考虑可扩展性的情况(如果你有两个 MicroserviceB 实例,调用哪个实例),失败(如果一个服务失败,谁重新运行套接字......),和其他一些人。这就是为什么它不是在微服务环境中进行异步调用的最佳选择。

DIEA

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

弑天下

Apache Pulsar 能够作为消息代理工作,并具有用于向主题发送消息和侦听主题的 WS 接口。我自己还没有尝试过……但我会测试使用它来发送和监听不同类型的微服务中的事件。Pulsar 本身是可扩展的,允许持久消息传递,例如可以在 Kubernetes 上安装和执行。但我只读过它......现在我必须自己尝试一下:)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java