Azure事件中心 - 具有SQL检查点的自定义使用者

时间:2017-04-16 22:26:52

标签: azure messaging azureservicebus azure-eventhub

我们目前正在将Azure事件中心视为向后台处理器发送消息的机制。目前正在使用基于队列的系统。

大多数处理器都在向SQL Server数据库写入数据,并且写入包含在事务中。

事件中心被定位为至少一次通信通道,因此应该预期重复的消息。 EventProcessorHost是读取端的推荐API,它使用Azure Blob存储自动执行租约管理和检查点。

但是对于一些最关键的处理器,我们有一个想法是使用同一数据库中的SQL Server表自己实现检查点,并将检查点写入处理器的同一事务中。这应该为我们提供了在需要时准确交付的有力保证。

暂时忽略租用管理(每个分区只运行1个处理器),基于SQL的检查点是个好主意吗?还有其他缺点,除了需要在较低级别的API上工作并自己处理检查点吗?

2 个答案:

答案 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的实现的动机,以及整体解决方案的高级视图。