具有事件驱动编排的REST API命令

时间:2019-05-10 09:59:39

标签: microservices spring-cloud-stream spring-kafka event-driven-design

我正在尝试以事件驱动的体系结构样式设计系统,还尝试公开REST API以发送命令/查询。我决定将Kafka用作消息代理。 我要设计的编舞如下: enter image description here

对我来说最模糊的部分是如何实现事件联接:

  1. billing-service应该仅在收到用户创建事件(1)并且帐户已创建(2)后才开始创建用户
  2. api-gateway仅在帐户和计费服务都已完成处理(2和3)后才将结果返回给客户端

我知道我可以在客户端使用其他协议(例如WebSockets),但是我不愿意这样做,因为我需要向第三方公开此类API。我还可以进行异步客户端调用并进行轮询,以检查请求是否已完成,但是管理起来似乎很复杂。 建议实现这种交互的方式是什么?

p.s。我正在使用Spring Boot和Spring Cloud Stream。

1 个答案:

答案 0 :(得分:1)

spring-cloud-stream可以在客户端进行请求/回复消息传递,但这涉及到一点,因为它不是为此而设计的,而是用于单向流处理的。

最好在客户端使用spring-kafka(ReplyingKafkaTemplate)或spring-integration-kafka(Outbound Gateway)进行请求/回复。

在服务端,您可以使用@StreamListener(spring-cloud-stream)或@KafkaListener或spring-integration入站网关。