0

我想通过 Db 事务将事件发送到 Microsoft Event-hub:

解释:

  1. 用户点击了订单创建的端点。
  2. OrderService 接受订单并将该订单放入数据库。
  3. 现在订单服务希望使用事件中心将该 orderId 作为事件发送到另一个服务。

如何实现第 2 步和第 3 步的事务行为?

我知道这些解决方案:

  1. 发件箱模式:我将消息放在另一个带有订单创建事务的表中。还有一个 cron/scheduler,它从表中获取消息并将它们标记为已传递。下次 cron 将只接收未传递的消息。

  2. 使用数据库审计日志和获取这些东西的库。库会将数据库表绑定到 Event-hub。然后在每个更新库上都会将该更改发送到 Event-hub。

我想知道 Event-hub 中是否有任何内置的事务功能?

或者

有没有更好的方法来处理这件事?

4

1 回答 1

1

目前事件中心内没有事务的概念。鉴于共享的有限上下文,我不确定事件中心是否最适合您的方案。Azure 服务总线具有事务支持,可能更适合您的预期流程。

在这种分布式场景中,无论您决定使用哪种消息代理,我都建议您采用最终一致性并考虑类似于以下的模式:

  • 您的订单创建端点收到请求

  • 订单创建端点为请求分配一个唯一标识符并将事件发送到事件中心;如果发送成功,它会向调用者返回 202(已接受)和一个Retry-After标头以指示调用者在检查该订单的创建状态之前他们应该等待该时间段。

  • 某些进程负责从事件中心读取事件并在数据库中创建该顺序。根据您的生态系统的容差,这可能是一个专用过程,也可能是类似于带有事件中心触发器的 Azure 函数。

  • 其他对订单感兴趣的事件消费者也将看到创建请求,并将使用订单创建端点分配的唯一标识符调用您的订单服务或数据库以获取详细信息;这可能是也可能不是系统中的官方订单号。

于 2020-05-18T14:20:36.393 回答