小编Das*_*jes的帖子

处理CQRS读取端的无序事件

我已经阅读了Jonathan Oliver关于处理无序事件的好帖子.

http://blog.jonathanoliver.com/cqrs-out-of-sequence-messages-and-read-models/

我们使用的解决方案是将消息出列并将其置于"保持表"中,直到收到具有先前序列的所有消息.当收到所有先前的消息后,我们将所有消息从保留表中取出,并通过适当的处理程序依次运行它们.一旦所有处理程序都成功执行,我们将从保留表中删除消息并将更新提交给读取的模型.

这适用于我们,因为域发布事件并使用适当的序列号标记它们.如果没有这个,下面的解决方案将变得更加困难 - 如果不是不可能的话.

此解决方案使用关系数据库作为持久性存储机制,但我们没有使用存储引擎的任何关系方面.与此同时,所有这一切都有一个警告.如果消息2,3和4到达但消息1从未到达,则我们不会应用其中任何消息.只有在出现错误处理消息1或消息1以某种方式丢失时,才会出现这种情况.幸运的是,很容易纠正我们的消息处理程序中的任何错误并重新运行消息.或者,在丢失消息的情况下,直接从事件存储重建构建读取模型.

得到了一些问题,尤其是关于他如何说我们总能向活动商店询问缺失的事件.

  1. CQRS的写入方是否必须为读取方提供服务以"请求"重放事件?例如,如果没有收到事件1,但是有2,4,3,我们可以通过服务要求eventstore从1开始重新发布事件吗?
  2. 此服务是CQRS写入方面的责任吗?
  3. 我们如何使用它重新构建读取模型?

cqrs event-sourcing event-store

10
推荐指数
1
解决办法
3759
查看次数

LINQ + TransactionScope不会更改SQL Server Profiler中的隔离级别

我正在使用以下格式使用linq将更改提交到我的数据库.

Begin Transaction (Scope Serialized, Required)
    Check Business Rule 1...N
    MyDataContext.SubmitChanges()
    Save Changes Done In Previous Query To Log File
End Transaction Scope
Run Code Online (Sandbox Code Playgroud)

但是在SQL Server探查器中,我在Connection:Start中看到以下行.

set transaction isolation level read committed
Run Code Online (Sandbox Code Playgroud)

我经历了这个(http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/93a45026-0425-4d49-a4ac-1b882e90e6d5)并认为我得到了答案;

直到我在Microsoft Connect上看到这个(https://connect.microsoft.com/VisualStudio/feedback/details/565441/transactionscope-linq-to-sql?wa=wsignin1.0).

有人可以告诉我,我的代码是否实际在序列化隔离级别下执行,或者它是否只是在read committed下运行?

transactions sql-server-profiler isolation-level sql-server-2008 linq-to-sql

4
推荐指数
1
解决办法
3803
查看次数