如何:使用HTTP调用非Dapr端点
从Dapr应用程序中通过服务调用访问非Dapr端点
本文介绍如何通过Dapr使用HTTP调用非Dapr端点。
通过Dapr的服务调用API,您可以与使用或不使用Dapr的端点进行通信。使用Dapr调用非Dapr端点不仅提供了一致的API,还带来了以下Dapr服务调用的优势:
- 应用弹性策略
- 通过跟踪和指标实现调用的可观测性
- 通过访问控制实现安全性
- 利用中间件管道组件
- 服务发现
- 使用请求头进行身份验证
通过HTTP调用外部服务或非Dapr端点
有时您可能需要调用非Dapr的HTTP端点,例如:
- 您可能只在应用程序的一部分中使用Dapr,尤其是在涉及旧系统时
- 您可能无法访问代码以将现有应用程序迁移到Dapr
- 您需要调用外部的HTTP服务
通过定义HTTPEndpoint资源,您可以声明性地配置与非Dapr端点的交互方式。然后,您可以使用服务调用URL来访问非Dapr端点。或者,您可以直接在服务调用URL中使用非Dapr的完全限定域名(FQDN)端点URL。
HttpEndpoint、FQDN URL和appId的优先级
在进行服务调用时,Dapr运行时遵循以下优先级顺序:
- 是否为命名的
HTTPEndpoint资源? - 是否为带有
http://或https://前缀的FQDN URL? - 是否为
appID?
服务调用与非Dapr HTTP端点
下图概述了Dapr在调用非Dapr端点时的工作流程。

- 服务A发起一个HTTP调用,目标是服务B(一个非Dapr端点)。调用被发送到本地的Dapr sidecar。
- Dapr通过
HTTPEndpoint或FQDN URL定位服务B的位置,然后将消息转发给服务B。 - 服务B向服务A的Dapr sidecar发送响应。
- 服务A接收响应。
使用HTTPEndpoint资源或FQDN URL调用非Dapr端点
在与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
使用appId调用启用Dapr的应用程序
AppID用于通过appID和my-method调用Dapr应用程序。阅读如何:使用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
相关链接
社区电话演示
观看此视频以了解如何使用服务调用来调用非Dapr端点。