如何用Db事务向Microsoft EventHub发送消息?

问题描述 投票:0回答:1

我想用Db事务发送事件到微软Event-hub,请问如何发送?

解释:

  1. 用户点击了一个创建订单的端点。
  2. 订单服务接受了订单,并将该订单放入数据库中。
  3. 现在,订单服务想把订单ID作为事件发送到另一个使用Event-hub的服务。

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

我知道这些解决方案。

  1. 发件箱模式: 我把消息放在另一个有订单创建事务的表中。有一个cronscheduler,它从表中获取消息并标记它们已送达,下次cron将只获取未送达的消息。

  2. 使用数据库审计日志和库来处理这些事情。库会将数据库表绑定到Event-hub。然后在每次更新时,库会将该变化发送到Event-hub。

我想知道Event-hub是否有内置的事务处理功能?

或者

有没有什么更好的方法来处理这个事情?

azure msmq azure-eventhub distributed-system outbox-pattern
1个回答
1
投票

目前在Event Hubs中没有事务的概念。 鉴于共享的有限上下文,我不确定Event Hubs是否最适合你的场景。 Azure 服务总线有 交易支持 并可能更自然地适合你的预期流程。

在这种分布式方案中,无论你决定使用哪种消息代理,我都会建议拥抱最终的一致性,并考虑类似的模式。

  • 你的订单创建端点收到一个请求

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

  • 一些进程负责从事件枢纽读取事件,并在数据库中创建该订单。 根据你的生态系统的容忍度,这可能是一个专门的进程,也可能是像Azure Function这样具有Event Hubs触发器的东西。

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

© www.soinside.com 2019 - 2024. All rights reserved.