操作指南:使用 HTTP 调用非 Dapr 端点
本文演示如何使用 HTTP 通过 Dapr 调用非 Dapr 端点。
使用 Dapr 的服务调用 API,您可以与使用或不使用 Dapr 的端点进行通信。使用 Dapr 调用不使用 Dapr 的端点不仅能提供一致的 API,还能带来以下 Dapr 服务调用 优势:
- 能够应用弹性策略
- 通过追踪与指标实现可观测性调用
- 通过作用域实现安全访问控制
- 能够利用中间件管道组件
- 服务发现
- 通过使用标头进行身份验证
调用外部服务或非 Dapr 端点的 HTTP 服务调用
有时您需要调用非 Dapr HTTP 端点。例如:
- 您可能选择仅在整个应用程序的部分使用 Dapr,包括遗留开发
- 您可能无法访问代码来将现有应用程序迁移到使用 Dapr
- 您需要调用外部 HTTP 服务。
通过定义 HTTPEndpoint 资源,您可以声明式地定义与非 Dapr 端点交互的方式。然后使用服务调用 URL 来调用非 Dapr 端点。或者,您也可以直接将非 Dapr 的完全限定域名(FQDN)端点 URL 放入服务调用 URL 中。
HTTPEndpoint、FQDN URL 与 appId 之间的优先级顺序
使用服务调用时,Dapr 运行时遵循以下优先级顺序:
- 这是命名的
HTTPEndpoint资源吗? - 这是带有
http://或https://前缀的 FQDN URL 吗? - 这是
appID吗?
服务调用与非 Dapr HTTP 端点
下图概述了 Dapr 的服务调用在调用非 Dapr 端点时的工作原理。

- 服务 A 向服务 B(一个非 Dapr 端点)发起 HTTP 调用。该调用发送到本地 Dapr 边车。
- Dapr 使用
HTTPEndpoint或 FQDN URL 发现服务 B 的位置,然后将消息转发给服务 B。 - 服务 B 向服务 A 的 Dapr 边车发送响应。
- 服务 A 接收响应。
为非 Dapr 端点使用 HTTPEndpoint 资源或 FQDN URL
在与 Dapr 应用程序或非 Dapr 应用程序通信时,有两种方法可以调用非 Dapr 端点。Dapr 应用程序可以通过提供以下内容之一来调用非 Dapr 端点:
命名的
HTTPEndpoint资源,包括定义HTTPEndpoint资源类型。有关示例,请参阅 HTTPEndpoint 参考 指南。localhost:3500/v1.0/invoke/<HTTPEndpoint-name>/method/<my-method>例如,对于名为 “palpatine” 的
HTTPEndpoint资源和名为 “Order66” 的方法,调用方式如下:curl http://localhost:3500/v1.0/invoke/palpatine/method/order66指向非 Dapr 端点的 FQDN URL。
localhost:3500/v1.0/invoke/<URL>/method/<my-method>例如,对于名为
https://darthsidious.starwars的 FQDN 资源,调用方式如下:curl http://localhost:3500/v1.0/invoke/https://darthsidious.starwars/method/order66
调用启用 Dapr 的应用程序时使用 appId
调用使用 appID 的 Dapr 应用程序时,始终使用 AppID。有关更多信息,请阅读 操作指南:使用 HTTP 调用服务 指南。例如:
localhost:3500/v1.0/invoke/<appID>/method/<my-method>
curl http://localhost:3602/v1.0/invoke/orderprocessor/method/checkout
TLS 身份验证
使用 HTTPEndpoint 资源 允许您根据远程端点的身份验证要求,使用根证书、客户端证书和私钥的任意组合。
使用根证书的示例
apiVersion: dapr.io/v1alpha1
kind: HTTPEndpoint
metadata:
name: "external-http-endpoint-tls"
spec:
baseUrl: https://service-invocation-external:443
headers:
- name: "Accept-Language"
value: "en-US"
clientTLS:
rootCA:
secretKeyRef:
name: dapr-tls-client
key: ca.crt
使用客户端证书和私钥的示例
apiVersion: dapr.io/v1alpha1
kind: HTTPEndpoint
metadata:
name: "external-http-endpoint-tls"
spec:
baseUrl: https://service-invocation-external:443
headers:
- name: "Accept-Language"
value: "en-US"
clientTLS:
certificate:
secretKeyRef:
name: dapr-tls-client
key: tls.crt
privateKey:
secretKeyRef:
name: dapr-tls-key
key: tls.key
服务器发送事件
SSE 支持与流服务器和 MCP 服务器进行实时通信。
HTTP 端点支持 服务器发送事件(SSE)。
要使用 SSE,请在 HTTPEndpoint 资源或服务调用请求中将 Accept 标头设置为 text/event-stream。
apiVersion: dapr.io/v1alpha1
kind: HTTPEndpoint
metadata:
name: "mcp-server"
spec:
baseUrl: https://my-mcp-server:443
headers:
- name: "Accept"
value: "test/event-stream"
相关链接
社区电话演示
观看此 视频,了解如何使用服务调用调用非 Dapr 端点。