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

Azure事件中心-具有SQL检查点的自定义使用者,azure,messaging,azureservicebus,azure-eventhub,Azure,Messaging,Azureservicebus,Azure Eventhub,我们目前正在将Azure事件中心视为向后台处理器发送消息的机制。目前正在使用基于队列的系统 大多数处理器都在向SQL Server数据库写入数据,并且这些写入都封装在事务中 事件集线器被定位为至少一个通信通道,因此应该预期重复的消息EventProcessorHost是推荐的读端API,它使用Azure Blob存储自动化租赁管理和检查点 但是,对于一些最关键的处理器,我们有一个想法,使用同一数据库中的SQL Server表自己实现检查点,并在处理器的同一事务中写入检查点。这将为我们提供强有力的

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

大多数处理器都在向SQL Server数据库写入数据,并且这些写入都封装在事务中

事件集线器被定位为至少一个通信通道,因此应该预期重复的消息
EventProcessorHost
是推荐的读端API,它使用Azure Blob存储自动化租赁管理和检查点

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


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

Azure存储是内置的解决方案,但我们并不局限于此。如果您的大多数处理器正在向SQL Server数据库写入数据,并且您不希望在Azure存储中有EventProcessorHost存储检查点(这需要存储帐户),那么在我看来,在SQL数据库中存储检查点可以提供一种简单的方式来生成流程事件并以事务方式管理检查点,这将是一个很好的解决办法


您可以编写自己的检查点管理器,用于在SQL数据库中存储检查点。

Azure存储是内置的解决方案,但我们不限于此。如果您的大多数处理器正在向SQL Server数据库写入数据,并且您不希望在Azure存储中有EventProcessorHost存储检查点(这需要存储帐户),那么在我看来,在SQL数据库中存储检查点可以提供一种简单的方式来生成流程事件并以事务方式管理检查点,这将是一个很好的解决办法


您可以编写自己的检查点管理器,用于在SQL数据库中存储检查点。

根据Fred的建议,我们基于SQL Server中的表实现了自己的检查点管理器。您可以找到代码示例

此实现很好地插入到
EventProcessorHost
中。我们还必须实现
ILeaseManager
,因为它们在默认实现中高度耦合


在中,我描述了这种基于SQL的实现的动机,以及总体解决方案的高级视图

根据Fred的建议,我们基于SQL Server中的表实现了自己的检查点管理器。您可以找到代码示例

此实现很好地插入到
EventProcessorHost
中。我们还必须实现
ILeaseManager
,因为它们在默认实现中高度耦合


在中,我描述了这种基于SQL的实现的动机,以及总体解决方案的高级视图

谢谢你,弗雷德。如果我实现这个接口,我是否能够重用EventProcessorHost的其他部分?或者与自定义代码相比,有什么好处?在线有相关样品吗?谢谢你。如果我实现这个接口,我是否能够重用EventProcessorHost的其他部分?或者与自定义代码相比,有什么好处?在线有相关样品吗?很好的解决方案。您是否介意分享更多关于如何实现ILeaseManager的信息?您是否关心将来的工作负载平衡(就像最初的租赁管理一样)?这是一个很好的解决方案。您是否介意分享更多关于如何实现ILeaseManager的信息?您是否关心将来的工作负载平衡(就像最初的租赁管理一样)?