API网关应该通过队列还是直接与其他μService通信?

时间:2019-06-16 20:42:17

标签: microservices message-queue cqrs gateway event-sourcing

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

(1)直接

direct communication GATEWAYμSERVICE A之间的直接通信

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

(2)事件

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

直接

第一种方法是您的microsvc B和C等待事件被发布。该系统的可伸缩性直接取决于microsvcA。如果microsvc A出现故障或落后于将事件写入队列怎么办?就像单点故障和瓶颈一样。您无法轻松扩展系统。

事件

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