Azure Service Bus队列最大批量更新消息锁定以进行批处理

时间:2018-08-13 05:12:37

标签: c# batch-processing azureservicebus

我正在使用Azure Service Bus队列通过批处理读取客户端消息。我正在通过 serviceBusClient.ReceiveBatch 从Service Bus队列中读取消息,并将其写入SQL数据库。在写入SQL数据库时,我还在后台线程中批量更新每条消息。假设SQL Server关闭了24小时,然后等待直到sql启动,然后将所有消息写入数据库,然后最终调用CompleteBatch。同时,一批中所有邮件的锁定都将自动更新。 现在我想知道我可以在多长时间(最多几个小时)内自动续订邮件锁定?

   #
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d12dc21, pid=1576, tid=3400
#
# JRE version: 7.0_05-b06
# Java VM: Java HotSpot(TM) Client VM (23.1-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [tess3Wrapper.dll+0x6dc21]

2 个答案:

答案 0 :(得分:0)

您可以根据需要多次更新锁定令牌。仅在接收消息时,而不是在更新锁定令牌期间,消息的传递计数才增加。因此,锁定续订没有限制。

您需要确保的一件事是,您应该在到期前更新令牌。

答案 1 :(得分:0)

您已经收到的答案是正确的,无限制的时间。话虽如此,我强烈建议您回顾一下您的设计。 以这个为例:

  

在编写SQL数据库时,我还在后台线程中批量更新每条消息。假设SQL Server关闭了24小时,然后等待直到sql启动,然后将所有消息写入数据库,然后最终调用CompleteBatch。同时,一批邮件中的所有邮件锁都将自动更新。

如果您的SQL Server停机了24小时,为什么您会根本收到任何消息?让我们更新他们的锁令牌吗?请记住,您要执行的操作要花钱。您正在接收并更新其锁的Evenry消息算作一项操作。这也极大地使您的实现复杂化。另一个需要注意的地方-锁更新可能会并且在某些时候将会失败。这是客户端驱动的命令,不能保证。