[英]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
任何原则,并且与恒定轮询相比,它是否是一种更好的方法?
最推荐的选项是添加一个队列:
如果你仍然使用 websocket,你将不得不考虑可扩展性(如果你有两个 MicroserviceB 实例,调用哪个实例),失败(如果一个服务失败怎么办,谁重新运行套接字......),和其他一些人。 这就是为什么它不是在微服务环境中进行异步调用的最佳选择。
如果你想走这条路——我建议更好的方法是转移焦点,这样你就有一个中央 websockets“服务器”,你的微服务直接连接到彼此。 然后你基本上是在复制其他架构是如何做到这一点的,无论是 RabbitMQ 还是 Kafka 等
Apache Pulsar 能够作为消息代理工作,并有一个 WS 接口用于发送消息和侦听主题。 我自己还没有尝试过……但我将测试使用它来发送和侦听不同类型微服务中的事件。 Pulsar 本身是可扩展的,允许持久的消息传递,例如可以在 Kubernetes 上安装和执行。 但我只读过它......现在我必须自己尝试:)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.