API 网关应该通过队列还是直接与其他服务进行通信?

flo*_*olu 9 gateway message-queue cqrs event-sourcing microservices

我想知道我的两种方法中哪一种更合适,或者还有另一种方法吗?

(1) 直接

直接沟通 GATEWAY和之间的直接通信?SERVICE A

  1. UI发送HTTP请求到GATEWAY
  2. GATEWAY发送HTTP请求到?SERVICE A
  3. ?SERVICE A返回SUCCESSERROR
  4. 事件存储EVENT STORE并发布到QUEUE
  5. PROJECTION DATABASE 已更新
  6. 其他?SERVICES可能消费事件

(2) 活动

队列通信 通过消息队列进行基于事件的通信

  1. UI发送HTTP请求到GATEWAY
  2. GATEWAY 发布事件到 QUEUE
  3. ?SERVICE A 消费事件
  4. 事件存储EVENT STORE并发布到QUEUE
  5. PROJECTION DATABASE 已更新
  6. 其他?SERVICES可能消费事件
  7. GATEWAY消费事件并将响应(SUCCESSERROR)发送到UI

如果我误解了一些概念,我真的很抱歉,我对这种建筑风格比较陌生。

在此先感谢您的帮助!:)

Imr*_*had 6

第二种方法是首选方法,是异步方法。

直接的

在第一种方法中,您的 microsvc B 和 C 等待事件发布。这个系统的可扩展性直接依赖于 microsvc A。如果 microsvc A 宕机或落后于将事件写入队列怎么办?这就像单点故障和瓶颈。您无法轻松扩展系统。

活动

在微服务中,我们保持系统异步以便它们可以扩展。网关应该使用 pub/sub 写入队列,并且所有这些微服务都可以同时使用事件。整个系统更加健壮并且可以扩展。