我希望在 Cosmos DB 中实现对发件箱模式的支持。
但是,Cosmos DB 似乎不支持跨集合的事务。
那我该怎么做呢?
我一直在考虑一些方法来实现这一点:
使用服务总线事务
在服务总线事务范围内,发送消息(尚未提交),进行 Cosmos DB 更新,如果它有效,那么我们提交服务总线事务以使消息对订阅者可用。
使用触发器在发件箱集合中插入行
随着插入/更新的发生,我们使用 Cosmos DB 触发器将相应的消息插入到发件箱表中,从那时起,一切照旧。
使用触发器执行 azure 函数
创建Azure 函数作为 Cosmos DB 触发器。我几乎喜欢这个,但直接向服务总线发送消息会更好。
使用数据泵
添加两个字段UpdateTimestamp
和OutboxMessageTimestamp
. 当记录更新时,UpdateTimestamp
.
某些进程会查找这两个不匹配的记录,并为每个记录创建一条通知消息并将其中继到相应的队列或主题。
当然,然后它会更新第二个时间戳,以便它们匹配。