使用NServiceBus将数据添加到数据库并排队而不进行事务处理

时间:2018-08-24 09:35:40

标签: nservicebus

我目前正在开发REST api。 api执行基本的操作。使用RabbitMQ将数据同步到旧系统。该API作为数据库在SQL Server上运行。

我想知道如何确保将数据保存在DB中并在总线上放置一条消息。

对我来说,您缺少分布式事务的事实似乎是一个非常普遍的问题,所以我想知道是否有使用NServiceBus解决此问题的最佳实践?

1 个答案:

答案 0 :(得分:1)

RabbitMQ本身不支持分布式事务,因此在这种情况下NServiceBus不能做的太多。不过,一种选择是:

  • 已将端点配置为使用Outbox feature
  • 当REST端点接收到HTTP请求时,将在本地将一条消息发送给self。在此阶段不执行任何数据库操作
  • 当收到发送给自己的消息时,您现在处于传入消息的上下文中,并且您可以:
    • 执行CRUD操作
    • 发送外发邮件
  • 即使没有分布式交易,发件箱也会保证一致性