我有一个水平的事件源驱动的应用程序,它使用Azure Service Bus Topic和Service Bus Queue运行。我的所有服务器都通过主题接收了构建我的域模型状态的一些事件,而队列中的那些事件(那些经常接收并且不改变域模型状态的事件)分布在服务器中为了分配负载。
现在,每当我的一台服务器通过队列或主题收到事件时,它就会将其存储在DocumentDB中,并将其用作事件存储。
现在问题出在这里。如何确保同一文档未插入两次?让我们说3台服务器收到同样的事件。他们都试图存储它。如果两个服务器决定同时执行所有服务器,我怎么能让它失败?我可以在DocumentDB或某种事务范围中设置任何形式的唯一约束来阻止文档被插入两次吗?
答案 0 :(得分:4)
每个文档的id属性都有唯一性约束。您可以使用此约束来确保不会将重复文档写入集合。