Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在azure服务总线队列中处理消息处理的选项_C#_.net_Azure_Servicebus - Fatal编程技术网

C# 在azure服务总线队列中处理消息处理的选项

C# 在azure服务总线队列中处理消息处理的选项,c#,.net,azure,servicebus,C#,.net,Azure,Servicebus,我正在开发一个使用azure服务总线队列的命令处理应用程序。 命令从网站发出并发布到队列,队列消息由工作人员角色处理。处理包括根据队列消息值从数据库和其他源获取数据,并将其发送到不同的主题。流程是, 接收消息 处理消息 在处理异常时将消息标记为完成/放弃消息 我在这里面临的挑战是处理时间。有时,它超过了最大消息锁定时间段(5分钟-已配置),因此消息被解锁,并重新显示,以便工作角色拾取(考虑工作角色的多个实例)。因此,这会导致再次处理相同的消息 我有什么选择来处理这种情况 我考虑过, 接收消息-添

我正在开发一个使用azure服务总线队列的命令处理应用程序。 命令从网站发出并发布到队列,队列消息由工作人员角色处理。处理包括根据队列消息值从数据库和其他源获取数据,并将其发送到不同的主题。流程是,

  • 接收消息
  • 处理消息
  • 在处理异常时将消息标记为完成/放弃消息
  • 我在这里面临的挑战是处理时间。有时,它超过了最大消息锁定时间段(5分钟-已配置),因此消息被解锁,并重新显示,以便工作角色拾取(考虑工作角色的多个实例)。因此,这会导致再次处理相同的消息

    我有什么选择来处理这种情况

    我考虑过,

  • 接收消息-添加到局部变量-标记消息完成。 如果出现异常,请将消息再次发送到队列或 单独的队列(让我们说失败的消息队列)。第二队 也意味着另一个工作者角色来处理它

  • 在处理过程中,有一个foreach循环运行。所以我想到了 改为使用Parallel.Foreach。但不确定有多少时间 增益它将给出并阅读一些关于使用时的问题的帖子 在蔚蓝中平行


  • 建议,修正欢迎。

    < P>你可能想考虑使用AN,Azure队列消息的最大租借时间是7天,而不是Azure服务总线队列租用时间为5分钟。 描述两种Azure队列类型之间的差异


    如果标准Azure队列不包含您需要的所有特征,则可以考虑使用这两种类型的队列。

    < P>您可能需要考虑使用AN,Azure队列消息的最大租用时间为7天,而不是Azure服务总线队列租用时间为5分钟。 描述两种Azure队列类型之间的差异


    如果标准Azure队列不包含您需要的所有特征,则可以考虑使用这两种类型的队列。

    < P> Aravind,在这种情况下,您绝对可以使用SB队列。使用最新的SDK,您可以在您的邮件继续处理期间续订邮件锁。详情载于:


    这类似于更新可见性超时的Azure存储队列功能:

    Aravind,在这种情况下,您完全可以使用SB队列。使用最新的SDK,您可以在您的邮件继续处理期间续订邮件锁。详情载于:


    这类似于更新可见性超时的Azure存储队列功能:

    您可以通过心跳操作启动任务,该操作在处理过程中不断为您更新锁。这正是我所做的。我在

    中介绍了我的方法,您可以通过心跳操作启动任务,在处理过程中不断为您更新锁。这正是我所做的。我在

    中描述了我的方法,我考虑了存储和servicebus队列,然后到达sb队列。如果您的处理需要5分钟以上,那么sb队列看起来不适合您的问题,存储队列允许更长的处理时间。您建议的解决方案1看起来不太好,如果在您将其标记为完成后角色/网络关闭,那么您将永远没有机会将其重新添加到队列中。如果服务总线特性对您至关重要,请考虑从SB队列中删除消息,将其添加到存储队列中,然后从SB队列中删除它,然后您可以从存储队列中处理消息(如果您想在同一个角色上)我考虑了存储和servicebus队列,然后到达sb队列。如果您的处理需要5分钟以上,那么sb队列看起来不适合您的问题,存储队列允许更长的处理时间。您建议的解决方案1看起来不太好,如果在您将其标记为完成后角色/网络关闭,那么您将永远没有机会将其重新添加到队列中。如果服务总线特性对您来说至关重要,请考虑从SB队列中删除消息,将其添加到存储队列中,然后从SB队列中删除它,然后您可以从存储队列中处理消息(如果您想在同一个角色上),这是一个不错的选择。我猜一个人必须有一个计时器并更新这个锁。但目前仍使用azure sdk 1.7。无论您使用的是哪一个azure sdk版本,您都可以使用以下NuGet包引用最新的Service Bus客户端库:看起来是个不错的选择。我猜一个人必须有一个计时器并更新这个锁。但目前仍使用azure sdk 1.7。无论您使用的是哪种azure sdk版本,您都可以使用以下NuGet软件包引用最新的Service Bus客户端库: