我们可以使用Web套接字在微服务之间进行通信吗?

时间:2019-02-04 08:41:52

标签: java spring spring-mvc websocket microservices

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

  • 这将减少微服务A和微服务B之间的耦合
  • 这将使对任务状态/结果感兴趣的微服务C无需对微服务B进行任何更改即可知道它。

如果仍然要使用websocket,则必须考虑可伸缩性(如果您有两个MicroserviceB实例,该如何调用),失败(如果一项服务出故障,又要重新运行套接字)。 。),以及其他一些。这就是为什么它不是在微服务环境中进行异步调用的最佳选择。

答案 1 :(得分:-2)

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