如何从REST与消息队列进行通信

时间:2017-12-02 22:33:40

标签: spring rest apache-kafka message-queue microservices

REST微服务如何可以与另一个混合微服务进行通信,这意味着他可以与REST和消息队列进行通信。例如,API网关。对于外部世界,他能够通过REST与App,Mobilephone进行通信,但后端的通信是通过消息队列进行的。

用例:

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

我该如何实施?我在Apache Kafka上使用Spring启动吗?我是否需要实现异步通信?

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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