Metadata API 参考

Metadata API 的详细文档

Dapr 有一个元数据 API,返回关于边车的信息,允许运行时可发现性。元数据端点返回以下信息。

  • 运行时版本
  • 已加载资源列表(componentssubscriptionsHttpEndpoints
  • 注册的 actor 类型
  • 启用的功能
  • 应用程序连接详情
  • 包含信息的自定义临时属性。

Metadata API

组件

每个已加载的组件提供其名称、类型和版本,以及关于组件功能形式的支持功能信息。 这些功能可用于状态存储绑定组件类型。下表显示了给定版本的组件类型及其功能列表。此列表可能会在未来增长,仅代表已加载组件的功能。

组件类型功能
状态存储ETAG, TRANSACTION, ACTOR, QUERY_API
绑定INPUT_BINDING, OUTPUT_BINDING

HTTPEndpoints

每个已加载的 HttpEndpoint 提供一个名称,以轻松识别与运行时关联的 Dapr 资源。

订阅

元数据 API 返回应用程序已向 Dapr 运行时注册的发布订阅订阅列表。这包括发布订阅名称、主题、路由、死信主题、订阅类型以及与订阅关联的元数据。

启用的功能

通过 Configuration 规范启用的功能列表(包括构建时覆盖)。

应用连接详情

元数据 API 返回与 Dapr 到应用程序的连接相关的信息。这包括应用端口、协议、主机、最大并发数以及健康检查详情。

Scheduler 连接详情

与到一个或多个 scheduler 主机的连接相关的信息。

工作流 API 运行时详情

与工作流 API 运行时详情相关的信息。

属性

元数据 API 允许您以键值对的格式存储额外的属性信息。这些是临时的内存中的数据,如果边车重新加载则不会持久化。此信息应在边车创建时添加(例如,应用程序启动后)。

获取 Dapr 边车信息

获取由元数据端点提供的 Dapr 边车信息。

用例:

获取元数据 API 可用于发现已加载组件支持的不同功能。它可以帮助运维人员确定要为所需功能配置哪些组件。

HTTP 请求

GET http://localhost:<daprPort>/v1.0/metadata

URL 参数

参数描述
daprPortDapr 端口。

HTTP 响应代码

代码描述
200返回元数据信息
500Dapr 无法返回元数据信息

HTTP 响应正文

元数据 API 响应对象

名称类型描述
idstring应用程序 ID
runtimeVersionstringDapr 运行时版本
enabledFeaturesstring[]由 Dapr 配置启用的功能列表,请参阅 https://docs.dapr.io/operations/configuration/preview-features/
actors元数据 API 响应注册 Actor[]注册的 actor 元数据的 json 编码数组。
extended.attributeNamestring自定义属性列表,以键值对形式,其中键是属性名称。
components元数据 API 响应组件[]已加载组件元数据的 json 编码数组。
httpEndpoints元数据 API 响应 HttpEndpoint[]已加载 HttpEndpoints 元数据的 json 编码数组。
subscriptions元数据 API 响应订阅[]发布订阅订阅元数据的 json 编码数组。
appConnectionProperties元数据 API 响应应用连接属性应用连接属性的 json 编码对象。
scheduler元数据 API 响应调度器调度器连接属性的 json 编码对象。
workflows元数据 API 响应工作流工作流运行时属性的 json 编码对象

元数据 API 响应注册 Actor

名称类型描述
typestring注册的 actor 类型。
countinteger运行中的 actor 数量。

元数据 API 响应组件

名称类型描述
namestring组件名称。
typestring组件类型。
versionstring组件版本。
capabilitiesarray此组件类型和版本支持的功能。

元数据 API 响应 HttpEndpoint

名称类型描述
namestringHttpEndpoint 的名称。

元数据 API 响应订阅

名称类型描述
pubsubnamestring发布订阅的名称。
topicstring主题名称。
metadataobject与订阅关联的元数据。
rules元数据 API 响应订阅规则[]与订阅关联的规则列表。
deadLetterTopicstring死信主题名称。
typestring订阅类型,可以是 DECLARATIVESTREAMINGPROGRAMMATIC

元数据 API 响应订阅规则

名称类型描述
matchstring用于匹配消息的 CEL 表达式,请参阅 https://docs.dapr.io/developing-applications/building-blocks/pubsub/howto-route-messages/#common-expression-language-cel
pathstring如果匹配表达式为 true,则路由消息的路径。

元数据 API 响应应用连接属性

名称类型描述
portinteger应用程序正在侦听的端口。
protocolstring应用程序使用的协议。
channelAddressstring应用程序正在侦听的主机地址。
maxConcurrencyinteger应用程序可以处理的最大并发请求数。
health元数据 API 响应应用连接属性健康检查应用程序的健康检查详情。

元数据 API 响应应用连接属性健康检查

名称类型描述
healthCheckPathstring健康检查路径,适用于 HTTP 协议。
healthProbeIntervalstring每次健康探测之间的时间,以 go duration 格式。
healthProbeTimeoutstring每次健康探测的超时时间,以 go duration 格式。
healthThresholdinteger在应用程序被视为不健康之前的最大失败健康探测次数。

元数据 API 响应调度器

名称类型描述
connected_addressesstring[]表示已连接的调度器主机的地址的字符串列表。

元数据 API 响应工作流

名称类型描述
connectedWorkersinteger已连接的工作流工作者的数量。

示例

curl http://localhost:3500/v1.0/metadata
{
  "id": "myApp",
  "runtimeVersion": "1.12.0",
  "enabledFeatures": [
    "ServiceInvocationStreaming"
  ],
  "actors": [
    {
      "type": "DemoActor"
    }
  ],
  "components": [
    {
      "name": "pubsub",
      "type": "pubsub.redis",
      "version": "v1"
    },
    {
      "name": "statestore",
      "type": "state.redis",
      "version": "v1",
      "capabilities": [
        "ETAG",
        "TRANSACTIONAL",
        "ACTOR"
      ]
    }
  ],
  "httpEndpoints": [
    {
      "name": "my-backend-api"
    }
  ],
  "subscriptions": [
    {
      "type": "DECLARATIVE",
      "pubsubname": "pubsub",
      "topic": "orders",
      "deadLetterTopic": "",
      "metadata": {
        "ttlInSeconds": "30"
      },
      "rules": [
          {
              "match": "%!s(<nil>)",
              "path": "orders"
          }
      ]
    }
  ],
  "extended": {
    "appCommand": "uvicorn --port 3000 demo_actor_service:app",
    "appPID": "98121",
    "cliPID": "98114",
    "daprRuntimeVersion": "1.12.0"
  },
  "appConnectionProperties": {
    "port": 3000,
    "protocol": "http",
    "channelAddress": "127.0.0.1",
    "health": {
      "healthProbeInterval": "5s",
      "healthProbeTimeout": "500ms",
      "healthThreshold": 3
    }
  },
  "scheduler": {
    "connected_addresses": [
      "10.244.0.47:50006",
      "10.244.0.48:50006",
      "10.244.0.49:50006"
    ]
  },
  "workflows": {
    "connectedWorkers": 1
  }
}

向 Dapr 边车信息添加自定义标签

向由元数据端点存储的 Dapr 边车信息添加自定义标签。

用例:

例如,Dapr CLI 在自托管模式下运行 dapr 时使用元数据端点来存储托管边车的进程的 PID 以及用于运行应用程序的命令。应用程序也可以在启动后添加属性作为键。

HTTP 请求

PUT http://localhost:<daprPort>/v1.0/metadata/attributeName

URL 参数

参数描述
daprPortDapr 端口。
attributeName自定义属性名称。这是键值对中的键名称。

HTTP 请求正文

在请求中,您需要将自定义属性值作为 RAW 数据传递:

{
  "Content-Type": "text/plain"
}

在请求的正文中放置您要存储的自定义属性值:

attributeValue

HTTP 响应代码

代码描述
204自定义属性已添加到元数据信息

示例

向元数据端点添加自定义属性:

curl -X PUT -H "Content-Type: text/plain" --data "myDemoAttributeValue" http://localhost:3500/v1.0/metadata/myDemoAttribute

获取元数据信息以确认您的自定义属性已添加:

{
  "id": "myApp",
  "runtimeVersion": "1.12.0",
  "enabledFeatures": [
    "ServiceInvocationStreaming"
  ],
  "actors": [
    {
      "type": "DemoActor"
    }
  ],
  "components": [
    {
      "name": "pubsub",
      "type": "pubsub.redis",
      "version": "v1"
    },
    {
      "name": "statestore",
      "type": "state.redis",
      "version": "v1",
      "capabilities": [
        "ETAG",
        "TRANSACTIONAL",
        "ACTOR"
      ]
    }
  ],
  "httpEndpoints": [
    {
      "name": "my-backend-api"
    }
  ],
  "subscriptions": [
    {
      "type": "PROGRAMMATIC",
      "pubsubname": "pubsub",
      "topic": "orders",
      "deadLetterTopic": "",
      "metadata": {
        "ttlInSeconds": "30"
      },
      "rules": [
          {
              "match": "%!s(<nil>)",
              "path": "orders"
          }
      ]
    }
  ],
  "extended": {
    "myDemoAttribute": "myDemoAttributeValue",
    "appCommand": "uvicorn --port 3000 demo_actor_service:app",
    "appPID": "98121",
    "cliPID": "98114",
    "daprRuntimeVersion": "1.12.0"
  },
  "appConnectionProperties": {
    "port": 3000,
    "protocol": "http",
    "channelAddress": "127.0.0.1",
    "health": {
      "healthProbeInterval": "5s",
      "healthProbeTimeout": "500ms",
      "healthThreshold": 3
    }
  },
  "scheduler": {
    "connected_addresses": [
      "10.244.0.47:50006",
      "10.244.0.48:50006",
      "10.244.0.49:50006"
    ]
  },
  "workflows": {
    "connectedWorkers": 1
  }
}