2017-12-02 213 views
0

REST Microservice如何与另一个混合的Microservice进行通信,这意味着他可以与REST和Message Queue进行通信。例如一个API网关。对于外部世界,他可以通过REST与应用程序,手机进行通信,但是来自后端的通信是通过消息队列进行的。如何从REST通信到消息队列

使用案例:

我的主页想要从数据库中获得车辆。他通过GET-Request请求API网关。 API网关接受GET请求并将其发布到消息队列中。另一个Microservice接收消息并发布结果。然后,API网关消耗结果并将其作为响应发回。

我该如何实现它?我是否在Apache Kafka上使用Spring引导?我需要实现异步通信吗?

(对不起它的德国) enter image description here

+0

我想你应该等待你的休息控制器的异步响应/超时。 –

回答

1

有解决这种情况的一些方法。

您可以为每个客户端请求创建主题并等待另一端的回复,例如DriverService会读取请求消息,获取所有数据并将其发布到您的客户端请求主题。一旦你消费了回应消息,你就会销毁该话题。

但是在请求 - 响应交互中,'临时'主题可能需要很长时间才能删除(如果没有配置可以避免这种情况,例如delete.topic.enable属性),并且您需要监视可能的主题过度生长。

Websocket是另一种可能的解决方案。您的客户端将开始监听之前与您的服务器达成一致的特定主题,然后在特定超时时间内等待响应,此时您的DriverService将发布到该特定套接字通道。

Spring Boot为您提供Kafka和Websockets的绝佳首发。如果您期待着大量的交易,我会采用混合策略,使用Kafka来帮助我的后端扩展并处理所有交易,然后通过Websocket响应客户端。