Azure webjob似乎不尊重MaxDequeueCount属性

2023-11-22

我有一个带有多个队列触发函数的 Azure webjob。 SDK 文档位于https://learn.microsoft.com/en-us/azure/app-service-web/websites-dotnet-webjobs-sdk-storage-queues-how-to#config定义了MaxDequeueCount属性为:

队列消息发送到队列之前的最大重试次数 毒物队列(默认为 5)。

但我没有看到这种行为。在我的网络作业中,我有:

JobHostConfiguration config = new JobHostConfiguration();
config.Queues.MaxDequeueCount = 1;
JobHost host = new JobHost(config);
host.RunAndBlock();

然后我有一个队列触发的函数,在其中抛出异常:

public void ProcessQueueMessage([QueueTrigger("azurewejobtestingqueue")] string item, TextWriter logger)
{
   if ( item == "exception" )
   {
      throw new Exception();
   }
}

查看 webjobs 仪表板,我发现 SDK 进行了 5 次尝试(如上所述,5 次是默认值):

Webjob failures shown on webjobs dashboard

在第五次尝试后,该消息将被移至有害队列。我预计会看到 1 次重试(或没有重试?),而不是 5 次。

更新:为 Web 应用程序启用详细日志记录,并选择将这些日志保存到 Azure blob 容器。发现一些与我的问题相关的日志位于azure-jobs-host-archive容器。下面的示例显示了出队计数为 96 的项目:

{
  "Type": "FunctionCompleted",
  "EndTime": "2017-02-22T00:07:40.8133081+00:00",
  "Failure": {
    "ExceptionType": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException",
    "ExceptionDetails": "Microsoft.Azure.WebJobs.Host.FunctionInvocationException: Exception while executing function: ItemProcessor.ProcessQueueMessage ---> MyApp.Exceptions.MySpecialAppExceptionType: Exception of type 'MyApp.Exceptions.MySpecialAppExceptionType' was thrown.
  },
  "ParameterLogs": {},
  "FunctionInstanceId": "1ffac7b0-1290-4343-8ee1-2af0d39ae2c9",
  "Function": {
    "Id": "MyApp.Processors.ItemProcessor.ProcessQueueMessage",
    "FullName": "MyApp.Processors.ItemProcessor.ProcessQueueMessage",
    "ShortName": "ItemProcessor.ProcessQueueMessage",
    "Parameters": [
      {
        "Type": "QueueTrigger",
        "AccountName": "MyStorageAccount",
        "QueueName": "stuff-processor",
        "Name": "sourceFeedItemQueueItem"
      },
      {
        "Type": "BindingData",
        "Name": "dequeueCount"
      },
      {
        "Type": "ParameterDescriptor",
        "Name": "logger"
      }
    ]
  },
  "Arguments": {
    "sourceFeedItemQueueItem": "{\"SourceFeedUpdateID\":437530,\"PodcastFeedID\":\"2d48D2sf2\"}",
    "dequeueCount": "96",
    "logger": null
  },
  "Reason": "AutomaticTrigger",
  "ReasonDetails": "New queue message detected on 'stuff-processor'.",
  "StartTime": "2017-02-22T00:07:40.6017341+00:00",
  "OutputBlob": {
    "ContainerName": "azure-webjobs-hosts",
    "BlobName": "output-logs/1ffd3c7b012c043438ed12af0d39ae2c9.txt"
  },
  "ParameterLogBlob": {
    "ContainerName": "azure-webjobs-hosts",
    "BlobName": "output-logs/1cf2c1b012sa0d3438ee12daf0d39ae2c9.params.txt"
  },
  "LogLevel": "Info",
  "HostInstanceId": "d1825bdb-d92a-4657-81a4-36253e01ea5e",
  "HostDisplayName": "ItemProcessor",
  "SharedQueueName": "azure-webjobs-host-490daea03c70316f8aa2509438afe8ef",
  "InstanceQueueName": "azure-webjobs-host-d18252sdbd92a4657d1a436253e01ea5e",
  "Heartbeat": {
    "SharedContainerName": "azure-webjobs-hosts",
    "SharedDirectoryName": "heartbeats/490baea03cfdfd0416f8aa25aqr438afe8ef",
    "InstanceBlobName": "zd1825bdbdsdgga465781a436q53e01ea5e",
    "ExpirationInSeconds": 45
  },
  "WebJobRunIdentifier": {
    "WebSiteName": "myappengine",
    "JobType": "Continuous",
    "JobName": "ItemProcessor",
    "RunId": ""
  }
}

我进一步寻找的是日志,它将向我显示特定队列项目的详细信息,其中处理成功(因此从队列中删除)或由于异常而失败并被放置在毒物队列中。到目前为止,我还没有找到任何显示该详细信息的日志。上面输出中引用的日志文件不包含此类数据。

更新2:看了我的毒药队列的状态,看起来它可能是确凿无疑的,但我太密集了,无法将2和2放在一起。查看下面队列的屏幕截图,您可以看到带有 ID 的消息(左列)431210在那里很多次。它出现多次的事实告诉我原始队列中的消息失败了不恰当地.

Poison queue


正如 Rob W 所提到的,使用 WindowsAzure.Storage > 7.1.2 时存在此问题。该问题显然已在问题 #1141但这还没有发布。

贡献者阿西弗曼分享了一个评论文章中的代码片段 on 问题 #985。这似乎解决了问题(它对我来说非常有效)。

为了防止链接失效,并满足 SO 规则,以下是该帖子以及代码片段:

对于那些迫不及待想要获得下一个版本的人(像我一样) WebJobs SDK 可与最新版本的 Azure 存储配合使用,以及 根据@brettsam的解释,你可以简单地编写一个自定义的 CustomQueueProcessorFactory 在中创建新的 CloudQueueMessage CopyMessageToPoisonQueueAsync。

namespace ConsoleApplication1
{
    using Microsoft.Azure.WebJobs.Host.Queues;
    using Microsoft.WindowsAzure.Storage.Queue;
    using System.Threading;
    using System.Threading.Tasks;

    public class CustomQueueProcessorFactory : IQueueProcessorFactory
    {
        public QueueProcessor Create(QueueProcessorFactoryContext context)
        {
            return new CustomQueueProcessor(context);
        }

        private class CustomQueueProcessor : QueueProcessor
        {
            public CustomQueueProcessor(QueueProcessorFactoryContext context)
                : base(context)
            {
            }

            protected override Task CopyMessageToPoisonQueueAsync(CloudQueueMessage message, CloudQueue poisonQueue, CancellationToken cancellationToken)
            {
                var newMessage = new CloudQueueMessage(message.Id, message.PopReceipt);
                newMessage.SetMessageContent(message.AsBytes);

                return base.CopyMessageToPoisonQueueAsync(newMessage, poisonQueue, cancellationToken);
            }
        }
    }
}

然后在您的 Main 中,您只需设置自定义队列处理器 作业主机配置中的工厂:

var config = new JobHostConfiguration();
config.Queues.QueueProcessorFactory = new CustomQueueProcessorFactory();

我可以让它与 WindowsAzure.Storage 8.1.1 一起工作 Microsoft.Azure.WebJobs 2.0.0。希望有帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure webjob似乎不尊重MaxDequeueCount属性 的相关文章

  • 如何使用PowerShell批量调用Update-Database

    我们使用 Azure 弹性池生成多个客户端数据库和一个引用客户端数据库的主数据库 我们已经拥有多个数据库 并且正在开发新版本的代码 我们使用 EF6 代码优先 当我们更改模型 添加属性 时 我们创建迁移文件并需要调用Update Datab
  • 如何通过ARM模板输出返回Redis的primaryKey?

    我正在尝试借助下面列出的 ARM 模板来部署 Redis 然后返回其主密钥 Azure 门户中 Redis 的 访问密钥 gt 主 下可用的秘密字符串 但是 我从管道 AzureResourceManagerTemplateDeployme
  • 如何在 FineUploader Azure 请求中包含 Content-MD5 标头?

    我想使用 Content MD5 标头向 Azure 提供客户端生成的上传文件的 MD5 哈希值 我如何在 FineUploader 中完成此任务 目标受众 Firefox Chrome Safari Opera 和 IE10 判断依据这个
  • 如何使用 python 从 Azure Data Lake Gen 2 读取文件

    我有一个文件位于 Azure Data Lake gen 2 文件系统中 我想读取文件的内容并进行一些低级更改 即从记录中的一些字段中删除一些字符 更明确地说 有些字段的最后一个字符也为反斜杠 由于该值包含在文本限定符 中 因此字段值会转义
  • Azure Service Fabric 上有许多日志文件

    我有一个在本地运行的 Azure Service Fabric 开发集群 其中包含两个应用程序 两周假期后 我回来发现我的硬盘完全满了 因此什么都不再有效了 sfdevcluster log traces 文件夹中有许多 etl 文件 所有
  • 如何使用Azure云服务(Web角色)部署App_Data文件

    我有一个我的 Web 角色需要读取的只读数据文件 用于 IP 地理位置 当前位于App Data文件夹中 该文件夹不包含在云服务的部署包中 与 Web 部署 不同 Azure 云服务部署没有包含 排除 App Data 的复选框 是否有合理
  • 更改 Azure 备份保管库冗余

    我们使用 Azure 备份并将备份保管库设置为使用 GRS 我们想使用 LRS 来代替 据了解 一旦机器添加到保险库中 这一点就无法更改 我们需要从头开始 两个问题 在为同一服务器设置新保管库之前 是否需要先删除当前保管库 当前的备份可以转
  • 如何使用 Azure 数据工厂将数据从追加变量活动复制到 csv 文件

    如何使用 Azure 数据工厂将数据从附加变量活动复制到 csv 文件 我有文件名数组存储在附加变量活动中 我想将所有这些文件名存储在数据湖位置的 CSV 文件中 欲了解更多信息 请参阅此如何使用 ADF 比较文件夹 Datalake 内的
  • Azure 数据工厂活动副本:使用 @pipeline().TriggerTime 评估接收器表中的列

    使用数据工厂 V2 我尝试实现从一个 Azure SQL 数据库到另一个数据库的数据流复制 我已将源表的所有列与接收器表映射 但在接收器表中我有一个空列 我想在其中输入管道运行时 有谁知道如何在接收器表中填充此列而不将其出现在源表中 下面是
  • 使用 Azure Key Vault 和 Spring Boot 进行 SQL Server 列加密

    我需要使用 Azure Key Vault 将数据保存在具有列加密的 SQL Server 中 Bean Primary public DataSource dataSource throws SQLException KeyVaultCl
  • Azure 上的 SSAS 表格?

    我正在尝试部署 ssas 表格模型 我不知道我在做什么 我用VS2013在SQL Server 2008 R2上制作了多维 我想尝试将 Tabular 与 Power BI 结合使用 所以我设置了一个 SQL Azure DB 我有 Azu
  • 在极少数情况下,重定向到 ACS 并返回后 Cookie 为空

    我的网站上有一份注册表 填写完毕后 用户将被重定向到 Azure ACS 以便登录 登录后 用户将被重定向回我的网站并进行注册和登录 注册表单由 JavaScript 提交 用户填写的信息通过 RegisterController 中的 R
  • 根据字符串列表查找第一个可用的序列号?

    给定一个字符串列表 例如 apple01 apple02 and apple04 banana02 cherry01 你会如何想出first可用序列号each类型 也就是说 apple03如果我问apple or banana01如果我问b
  • 不要覆盖 Azure Blob 存储

    我有一种将文件添加到 Azure Blob 存储的方法 问题是我试图指定一个条件 在该条件下它不会覆盖 blob 而只是添加到其中 我正在尝试使用参数访问条件 但是 VS 说这个方法不能采用两个参数 async void archiveNe
  • 实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

    我使用实体框架创建了一个 MVC 4 应用程序来读取数据并将数据写入我在 Azure 数据库上托管的数据库 Azure 数据库应该保存应用程序数据和应用程序的登录数据 但是 当我第一次创建应用程序时 我忘记删除到本地计算机的连接字符串 因此
  • 如何获取Azure帐户租户ID?

    我的问题是 是否可以在不使用 powershell 命令的情况下获取 azure Active Directory 租户 id 我找到了这两篇博客 在这个帮助下 我已经能够从 powershell 获取租户 ID 和订阅 ID 这是找回租客
  • Azure AD 注销 URL 未重定向

    我正在构建以下 URL https login microsoftonline com
  • UseOpenIdConnectAuthentication - 无法取消对消息的保护。状态错误消息

    我正在尝试将 Google 和 Azure Active Directory 权限添加为我的应用程序中的 OpenIdConnect 选项 如果我单独添加它们 它就可以正常工作 但如果我将它们都添加 我会收到以下错误消息 无法取消对消息的保
  • 直接从浏览器将文件上传到 Azure Blob 存储?

    是否可以创建一个 html 表单以允许 Web 用户直接将文件上传到 azure blob 存储 而无需使用其他服务器作为中介 S3 和 GAW blobstore 都允许这样做 但我找不到任何对 azure blob 存储的支持 编辑 2
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对

随机推荐

  • PHP 检测 shell_exec() 命令是否失败

    我在 PHP 的 shell exec 中运行 ffmpeg 命令来转换列表中的多个视频 是否有办法检测视频转换时是否发生错误 或至少验证它完全完成转换 如果发生错误 我不想停止转换其他视频 只是能够记录错误 使用另一个系统调用函数捕获退出
  • 两个正整数相乘的结果转换为负值

    我有这样的代码 int a 629339 int b 4096 long res a b 结果是 1717194752但如果我添加一个手动转换到长long res long a b or long res long a b 结果是正确的25
  • 如何使用 javascript / jQuery 递增/递减十六进制颜色值

    是否可以在 jQuery JavaScript 中逐步增加或减少十六进制颜色值 我想做的是这样的 改编自 for 循环 for var i 0 i lt 100 i console log i 我想做类似的事情 for var color
  • 基于多个 1 级列的子集多索引 DataFrame

    我有一个多索引 DataFrame 但我想为每个 0 级变量 即列 一 和 二 在每个级别 1 保留两列 我可以分别对它们进行子集化 但我想将它们放在一起 这样我就可以并排保留值 这是数据框 index pd MultiIndex from
  • 如何在SQL中从字符串中提取某些第n个字符

    我有一个返回值为 xxx xxx xxx xxxxx xx x 的字段 我如何从该代码中提取第 10 个字符 select substring xxx xxx xxx xxxxx xx x 10 1 The documentation fo
  • 为什么我在运行 MS Access 查询时收到“输入参数值”?

    SELECT ID Name SELECT CityName FROM City WHERE Employee CityID City CityID AS City Name FROM Employee WHERE City Name Ne
  • firebase.auth 不是函数

    我将 Webpack 与 firebase 和 firebase admin 一起使用 为了安装 firebase 我运行了 npm install save firebase 我正在使用以下命令导入 firebase import as
  • ASP.NET MVC 3.0.0.1 版安全补丁破坏了构建 [重复]

    这个问题在这里已经有答案了 安装 ASP NET MVC 3 安全更新后KB2990942看来 MVC 版本增加了3 0 0 0 to 3 0 0 1 这会导致 Visual Studio 不再找到引用
  • pandas 函数与 isin

    我有一个像这样的数据框 aa bb cc a x y a 1 b d z b 2 c e f s 3 np nan d 4 我正在尝试创建一个像这样的新专栏 aa bb cc dd a x y a 1 True b d z b 2 True
  • 追踪 React 组件重新渲染的原因

    是否有系统的方法来调试导致组件在 React 中重新渲染的原因 我放置了一个简单的 console log 来查看它渲染了多少次 但我很难弄清楚是什么导致组件渲染多次 即在我的情况下 4 次 是否存在显示时间线和 或所有组件树渲染和顺序的工
  • 如何将*可选*引用返回到 RefCell 内容中

    我有一种类型 将其数据存储在后面的容器中Rc
  • 在 Mac App Bundle 中嵌入框架

    我正在尝试将 SDL 和 SDL ttf 框架添加到我的应用程序中 并且我已经按照通常的方式完成了操作 将它们添加到 将二进制文件与库链接 部分中 并添加了一个复制文件阶段 将它们复制到 Frameworks 目录 这确实创建了一个带有嵌入
  • Angular 2 隐藏字段的表单验证

    我有一个银行贷款申请 其中包含很多输入字段 其中一些是隐藏的 隐藏字段根据一组条件动态显示 例如 如果您选择选项 1 则会显示隐藏字段 并隐藏一些其他字段 如果您选择选项 2 某些字段将显示 其他字段将隐藏 在表单的末尾 我有一个 这意味着
  • 如何让 SASS 嵌套的嵌套媒体查询与媒体查询或运算符的使用一起使用

    我正在尝试让嵌套的 IE10 媒体查询在 SASS 中工作 但我不理解输出 我认为使用媒体查询会让事情变得很奇怪or操作员 因此 此查询不会适用于所有情况 因为唯一输出的是查询的一侧or 请注意 这些最初是 mixin 我删除了 mixin
  • JPA Criteria Builder OneToMany 限制

    我有一个与子表具有 OneToMany 关联的父级 我正在尝试使用 CriteriaBuilder 编写一个查询来限制从 Child 表返回的结果 我正在添加一个谓词 例如 cb equal parent get children get
  • 线程队列工作示例[重复]

    这个问题在这里已经有答案了 在下面的代码中如何将最大打开线程数限制为 20 我知道过去曾提出过一些类似的问题 但我特别想知道如何使用队列最好地完成此操作 并在可能的情况下使用工作示例 b is a list with 10000 items
  • 如何处理从Delphi 6和WinXP到Delphi 2007和Vista/Win7的窗体大小问题

    我有一个用 Delphi 6 编写并在 Windows XP 上编译的应用程序 通常我在控件和表单边缘之间留出 8px 的空闲空间 当此应用程序在 Vista 或 Win 7 上运行时 这种差距会更小或根本不存在 我认为这可能是因为这些版本
  • 数组的 getter 和 setter

    我有一些关于数组的 getter 和 setter 的问题 假设我们有一个这样的类 它在其构造函数中创建一个数组的私有副本 import java util Arrays public class Foo private int array
  • UITableView 上的 UISearchBar 奇怪的偏移问题

    我有一个UITableView其中有一个UISearchBar子视图 这一切都在一个人的观点上UIViewController以及一些其他子视图 标签 文本字段等 表格的搜索栏和内容偏移量的行为非常奇怪 但它似乎取决于这些视图添加到 xib
  • Azure webjob似乎不尊重MaxDequeueCount属性

    我有一个带有多个队列触发函数的 Azure webjob SDK 文档位于https learn microsoft com en us azure app service web websites dotnet webjobs sdk s