我们有一个用例,我们有两个微服务,Microservice A将一个长时间运行的任务推送到Microservice B.Microservice B开始处理任务并不断更新任务的状态。现在Microservice A必须不断轮询Microservice B任务状态的更新。我们当前的设置中没有队列。因此,我们想到了创建一个web socketbetween Microservice A,Microservice B以便微服务 B 可以将状态更新推送到Microservice A. 这种设计是否会违反任何原则,Web sockets并且与持续轮询相比,它是否会是一种更好的方法?
3 回答
万千封印
TA贡献1891条经验 获得超3个赞
最推荐的选项是添加一个队列:
这将减少微服务 A 和微服务 B 之间的耦合
这将允许同样对任务状态/结果感兴趣的微服务 C 了解它,而无需对微服务 B 进行任何更改
如果你仍然选择 websocket,你将不得不考虑可扩展性的情况(如果你有两个 MicroserviceB 实例,调用哪个实例),失败(如果一个服务失败,谁重新运行套接字......),和其他一些人。这就是为什么它不是在微服务环境中进行异步调用的最佳选择。
DIEA
TA贡献1820条经验 获得超2个赞
如果你想走这条路——我建议更好的方法是转移焦点,这样你就有一个中央 websockets“服务器”,你的微服务直接相互连接。然后,您实际上是在复制所有其他架构如何做到这一点,无论是 RabbitMQ 还是 Kafka 等
弑天下
TA贡献1818条经验 获得超8个赞
Apache Pulsar 能够作为消息代理工作,并具有用于向主题发送消息和侦听主题的 WS 接口。我自己还没有尝试过……但我会测试使用它来发送和监听不同类型的微服务中的事件。Pulsar 本身是可扩展的,允许持久消息传递,例如可以在 Kubernetes 上安装和执行。但我只读过它......现在我必须自己尝试一下:)。
添加回答
举报
0/150
提交
取消