Azure Functions 1.x 的 host.json 参考

host.json 元数据文件包含对函数应用的所有函数产生影响的全局配置选项。 本文列出了可用于 v1 运行时的设置。 JSON 架构位于 http://json.schemastore.org/host。

Note

本文适用于 Azure Functions 1.x。 有关 Functions 2.x 中 host.json 的参考,请参阅 Azure Functions 2.x 的 host.json 参考

其他函数应用配置选项在应用设置中进行管理。

local.settings.json 文件中的某些 host.json 设置仅在本地运行时才使用。

示例 host.json 文件

以下示例 host.json 文件指定了所有可能的选项。

{
    "eventHub": {
      "maxBatchSize": 64,
      "prefetchCount": 256,
      "batchCheckpointFrequency": 1
    },
    "functions": [ "QueueProcessor", "GitHubWebHook" ],
    "functionTimeout": "00:05:00",
    "healthMonitor": {
        "enabled": true,
        "healthCheckInterval": "00:00:10",
        "healthCheckWindow": "00:02:00",
        "healthCheckThreshold": 6,
        "counterThreshold": 0.80
    },
    "http": {
        "routePrefix": "api",
        "maxOutstandingRequests": 20,
        "maxConcurrentRequests": 10,
        "dynamicThrottlesEnabled": false
    },
    "id": "9f4ea53c5136457d883d685e57164f08",
    "queues": {
      "maxPollingInterval": 2000,
      "visibilityTimeout" : "00:00:30",
      "batchSize": 16,
      "maxDequeueCount": 5,
      "newBatchThreshold": 8
    },
    "serviceBus": {
      "maxConcurrentCalls": 16,
      "prefetchCount": 100,
      "autoRenewTimeout": "00:05:00"
    },
    "singleton": {
      "lockPeriod": "00:00:15",
      "listenerLockPeriod": "00:01:00",
      "listenerLockRecoveryPollingInterval": "00:01:00",
      "lockAcquisitionTimeout": "00:01:00",
      "lockAcquisitionPollingInterval": "00:00:03"
    },
    "tracing": {
      "consoleLevel": "verbose",
      "fileLoggingMode": "debugOnly"
    },
    "watchDirectories": [ "Shared" ],
}

本文的以下各部分解释了每个顶级属性。 除非另有说明,否则其中的所有属性都是可选的。

durableTask

Durable Functions 的配置设置。

{
  "durableTask": {
    "hubName": "MyTaskHub",
    "controlQueueBatchSize": 32,
    "partitionCount": 4,
    "controlQueueVisibilityTimeout": "00:05:00",
    "workItemQueueVisibilityTimeout": "00:05:00",
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "maxQueuePollingInterval": "00:00:30",
    "azureStorageConnectionStringName": "AzureWebJobsStorage",
    "trackingStoreConnectionStringName": "TrackingStorage",
    "trackingStoreNamePrefix": "DurableTask",
    "traceInputsAndOutputs": false]
  }
}

任务中心名称必须以字母开头且只能包含字母和数字。 如果未指定,则函数应用的默认任务中心名称是 DurableFunctionsHub。 有关详细信息,请参阅任务中心

属性 默认 说明
hubName DurableFunctionsHub 可以使用备用任务中心名称将多个 Durable Functions 应用程序彼此隔离,即使这些应用程序使用同一存储后端。
controlQueueBatchSize 32 要从控制队列中一次性拉取的消息数。
partitionCount 4 控制队列的分区计数。 可以是 1 到 16 之间的正整数。
controlQueueVisibilityTimeout 5 分钟 已取消排队的控制队列消息的可见性超时。
workItemQueueVisibilityTimeout 5 分钟 已取消排队的工作项队列消息的可见性超时。
maxConcurrentActivityFunctions 10 倍于当前计算机上的处理器数 可以在单个主机实例上并发处理的活动函数的最大数目。
maxConcurrentOrchestratorFunctions 10 倍于当前计算机上的处理器数 可以在单个主机实例上并发处理的业务流程协调程序函数的最大数目。
maxQueuePollingInterval 30 秒 最大的控制和工作项队列轮询时间间隔,采用 hh:mm:ss 格式。 值越高,可能导致的消息处理延迟也越高。 值越低,可能导致的存储成本会越高,因为存储事务数增高。
azureStorageConnectionStringName AzureWebJobsStorage 应用设置的名称,其中的 Azure 存储连接字符串用于管理基础的 Azure 存储资源。
trackingStoreConnectionStringName 连接字符串的名称,用于“历史记录”和“实例”表。 如果未指定,则使用 azureStorageConnectionStringName 连接。
trackingStoreNamePrefix 指定 trackingStoreConnectionStringName 时用于“历史记录”和“实例”表的前缀。 如果未设置,则默认前缀值为 DurableTask。 如果 trackingStoreConnectionStringName 未指定,则“历史记录”和“实例”表会使用 hubName 值作为其前缀,trackingStoreNamePrefix 的任何设置都会被忽略。
traceInputsAndOutputs false 一个指示是否跟踪函数调用的输入和输出的值。 跟踪函数执行事件时的默认行为是在函数调用的序列化输入和输出中包括字节数。 此行为提供的有关输入和输出情况的信息是最少的,不会导致日志膨胀,也不会无意中将敏感信息公开。 将此属性设置为 true 会导致默认函数日志记录将函数输入和输出的整个内容都记录下来。

许多此类设置用于优化性能。 有关详细信息,请参阅性能和缩放

eventHub

事件中心触发器和绑定的配置设置。

{
    "eventHub": {
      "maxBatchSize": 64,
      "prefetchCount": 256,
      "batchCheckpointFrequency": 1
    }
}
属性 默认 说明
maxBatchSize 64 每个接收循环收到的最大事件计数。
prefetchCount 不适用 基础 EventProcessorHost 将要使用的默认 PrefetchCount。
batchCheckpointFrequency 1 创建 EventHub 游标检查点之前要处理的事件批数。

functions

作业主机运行的函数列表。 空数组表示运行所有函数。 仅供在本地运行时使用。 在 Azure 的函数应用中,应改为按照如何在 Azure Functions 中禁用函数中的步骤禁用特定函数,而不是使用此设置。

{
    "functions": [ "QueueProcessor", "GitHubWebHook" ]
}

functionTimeout

指示所有函数的超时持续时间。 在应用服务计划中,没有总体限制,默认值取决于运行时版本。

{
    "functionTimeout": "00:05:00"
}

healthMonitor

主机运行状况监视器的配置设置。

{
    "healthMonitor": {
        "enabled": true,
        "healthCheckInterval": "00:00:10",
        "healthCheckWindow": "00:02:00",
        "healthCheckThreshold": 6,
        "counterThreshold": 0.80
    }
}
属性 默认 说明
Enabled 指定是否已启用该功能。
healthCheckInterval 10 秒 定期后台运行状况检查之间的时间间隔。
healthCheckWindow 2 分钟 healthCheckThreshold 设置结合使用的滑动时间窗口。
healthCheckThreshold 6 在启动主机回收之前,运行状况检查可以失败的最大次数。
counterThreshold 0.80 性能计数器将被视为不正常的阈值。

http

http 触发器和绑定的配置设置。

{
    "http": {
        "routePrefix": "api",
        "maxOutstandingRequests": 200,
        "maxConcurrentRequests": 100,
        "dynamicThrottlesEnabled": true
    }
}
属性 默认 说明
routePrefix api 应用到所有路由的路由前缀。 使用空字符串可删除默认前缀。
maxOutstandingRequests 200* 在任意给定时间搁置的未完成请求数上限。 此限制包括已排队但尚未开始执行的请求,以及正在执行的所有请求。 超出此限制的任何传入请求将被拒绝,并返回 429“太忙”响应。 允许调用方使用基于时间的重试策略,还可帮助控制最大请求延迟。 此设置仅控制脚本宿主执行路径中发生的排队。 其他队列(例如 ASP.NET 请求队列)仍有效,不受此设置的影响。 *版本 1.x 的默认值是无限制的。 专用计划中版本 2.x 的默认值是无限制的。
maxConcurrentRequests 100* 要并行执行的 http 函数数目上限。 这样,可以控制并发性,从而帮助管理资源利用率。 例如,某个 http 函数可能使用了大量系统资源(内存/CPU/插槽),从而在并发性过高时导致问题。 或者,某个函数向第三方服务发出出站请求,则可能需要限制这些调用的速率。 在这种情况下,应用限制可能有帮助。 *版本 1.x 的默认值是无限制的。 专用计划中版本 2.x 的默认值是无限制的。
dynamicThrottlesEnabled true* 启用时,将为此设置将导致请求处理管道,以定期检查系统性能计数器类似连接/线程/进程/内存/CPU 等,并通过内置的高阈值 (80%),如果有任何这些计数器请求拒绝与 429“太忙”响应,直至恢复到正常水平的计数器。 *版本 1.x 的默认值是 false。 专用计划中版本 2.x 的默认值为 false。

id

仅限版本 1.x

作业宿主的唯一 ID。 可以是不带短划线的小写 GUID。 在本地运行时必须指定。 在 Azure 中运行时,我们建议你不要设置 ID 值。 省略 id 时,Azure 中会自动生成 ID。

如果跨多个函数应用共享存储帐户,请确保每个函数应用都有不同的 id。 可省略 id 属性或手动将每个函数应用的 id 设置为不同的值。 计时器触发器使用存储锁来确保当函数应用横向扩展到多个实例时将只有一个计时器实例。 如果两个函数应用共享相同的 id 且每个都使用计时器触发器,则只会运行一个计时器。

{
    "id": "9f4ea53c5136457d883d685e57164f08"
}

queues

存储队列触发器和绑定的配置设置。

{
    "queues": {
      "maxPollingInterval": 2000,
      "visibilityTimeout" : "00:00:30",
      "batchSize": 16,
      "maxDequeueCount": 5,
      "newBatchThreshold": 8
    }
}
属性 默认 说明
maxPollingInterval 60000 队列轮询的最大间隔时间,以毫秒为单位。
visibilityTimeout 0 消息处理失败时的重试间隔时间。
batchSize 16 Functions 运行时同时检索并并行处理的队列消息数。 当处理的数量下降到 newBatchThreshold 时,运行时可获取另一个批,并开始处理这些消息。 因此,每个函数处理的最大并发消息数是 batchSize 加上 newBatchThreshold。 此限制分别应用于各个队列触发的函数。

如果要避免对队列上收到的消息并行执行,可以将 batchSize 设置为 1。 但是,只有在函数于单个虚拟机 (VM) 上运行时,此设置才可消除并发。 如果函数应用横向扩展到多个 VM,每个 VM 可运行每个队列触发的函数的一个实例。

batchSize 的最大值为 32。
maxDequeueCount 5 在将某个消息移到有害队列之前,尝试处理该消息的次数。
newBatchThreshold batchSize/2 只要同时处理的消息数下降到此数值,运行时即检索另一个批次。

serviceBus

服务总线触发器和绑定的配置设置。

{
    "serviceBus": {
      "maxConcurrentCalls": 16,
      "prefetchCount": 100,
      "autoRenewTimeout": "00:05:00"
    }
}
属性 默认 说明
maxConcurrentCalls 16 消息泵应该对回调发起的最大并发调用数。 默认情况下,Functions 运行时同时处理多条消息。 若要指示运行时一次只处理单个队列或主题消息,请将 maxConcurrentCalls 设置为 1。
prefetchCount 不适用 基础 MessageReceiver 将要使用的默认 PrefetchCount。
autoRenewTimeout 00:05:00 自动续订消息锁的最长持续时间。

singleton

单一实例锁行为的配置设置。 有关详细信息,请参阅有关单一实例支持的 GitHub 问题

{
    "singleton": {
      "lockPeriod": "00:00:15",
      "listenerLockPeriod": "00:01:00",
      "listenerLockRecoveryPollingInterval": "00:01:00",
      "lockAcquisitionTimeout": "00:01:00",
      "lockAcquisitionPollingInterval": "00:00:03"
    }
}
属性 默认 说明
lockPeriod 00:00:15 占用函数级锁的时间段。 锁自动续订。
listenerLockPeriod 00:01:00 占用侦听器锁的时间段。
listenerLockRecoveryPollingInterval 00:01:00 在启动时无法获取侦听器锁的情况下,用于恢复侦听器锁的时间间隔。
lockAcquisitionTimeout 00:01:00 运行时尝试获取锁的最长时间。
lockAcquisitionPollingInterval 不适用 尝试获取锁的间隔时间。

tracing

版本 1.x

使用 TraceWriter 对象创建的日志的配置设置。 请参阅 C# 日志记录Node.js 日志记录

{
    "tracing": {
      "consoleLevel": "verbose",
      "fileLoggingMode": "debugOnly"
    }
}
属性 默认 说明
consoleLevel info 控制台日志记录的跟踪级别。 选项包括:offerrorwarninginfoverbose
fileLoggingMode debugOnly 文件日志记录的跟踪级别。 选项包括 neveralwaysdebugOnly

watchDirectories

应该监视其更改情况的一组共享代码目录。 确保当这些目录中的代码发生更改时,函数会拾取这些更改。

{
    "watchDirectories": [ "Shared" ]
}

后续步骤