带有SQL问题的NServiceBus发件箱模式



我试图弄清楚发件箱应该如何与NServicebus一起工作,但我不太确定我是否能理解

服务1服务2服务3服务

每个服务都有自己的数据库,用于保存业务数据和用于队列/消息代理的servicebus共享数据库

这意味着这些服务中的每一个都对servicebus使用相同的连接字符串,而对业务数据库使用不同的连接字符串

我们面临的问题是,从技术上讲,保存到业务数据库和发布就是保存到2个数据库,所以如果将其封装到事务中,这将创建分布式事务。

现在,我正在考虑实现发件箱模式来解决这个问题,但NServiceBus文档并没有真正为我们提供关于这个问题的想法:

  • 发件箱表格应存放在哪里

通过启用发件箱NServiceBus确实创建了一个新的表来保存消息servicename_outbox表,但它应该存储在Servicebus数据库还是业务数据数据库中如果存储在servicebus数据库中,那么从技术上讲,要将数据保存到其中,还需要分布式事务吗?

  • servicebus如何知道将哪个表用于Outbox模式并调度消息?这可以明确配置吗

发件箱表应该存储在哪里?它是否被假设存储在与商业数据相同的数据库中?

在这种情况下,给定服务的子脚本数据将存储在哪里?

如果您使用消息驱动的pubsub而不是本机pubsub,那么是的。

是否可以将NServicebus配置为在业务数据库中创建发件箱表,而其他表则在服务总线数据库中创建?

是的,这是意料之中的事。

但它应该存储在Servicebus数据库还是业务数据数据库中?如果它存储在servicebus数据库中,那么从技术上讲,要将数据保存到其中,它还需要分布式事务吗?

发件箱数据存储在业务数据库中,并共享相同的存储连接/事务,因此不需要分布式事务。

servicebus如何知道哪个表用于Outbox模式并调度消息?

每个端点都有自己的实体。

这可以显式配置吗?

请检查您正在使用的persister的发件箱配置,看看是否可以配置表名:

https://docs.particular.net/persistence/

最新更新