我们目前正在将Azure事件中心视为向后台处理器发送消息的机制。目前正在使用基于队列的系统。
大多数处理器都在向SQL Server数据库写入数据,并且写入包含在事务中。
事件中心被定位为至少一次通信通道,因此应该预期重复的消息。 EventProcessorHost
是读取端的推荐API,它使用Azure Blob存储自动执行租约管理和检查点。
但是对于一些最关键的处理器,我们有一个想法是使用同一数据库中的SQL Server表自己实现检查点,并将检查点写入处理器的同一事务中。这应该为我们提供了在需要时准确交付的有力保证。
暂时忽略租用管理(每个分区只运行1个处理器),基于SQL的检查点是个好主意吗?还有其他缺点,除了需要在较低级别的API上工作并自己处理检查点吗?
答案 0 :(得分:1)
Azure存储是内置解决方案,但我们不限于此。如果您的大多数处理器都在向SQL Server数据库写入数据,并且您不希望在Azure存储中使用EventProcessorHost存储检查点(需要存储帐户),则在我的视图中,将检查点存储在SQL数据库中,这提供了一种简单的方法处理事件并在事务上管理检查点,这将是一个很好的解决方案。
您可以使用ICheckpointManager interface编写自己的检查点管理器,以便在SQL数据库中存储检查点。
答案 1 :(得分:1)
根据Fred的建议,我们基于SQL Server中的表实现了自己的Checkpoint Manager。您可以找到代码示例here。
此实现很好地插入EventProcessorHost
。我们还必须实现ILeaseManager
,因为它们在默认实现中高度耦合。
在my blog post我已经描述了我对这种基于SQL的实现的动机,以及整体解决方案的高级视图。