操作方法:使用HTTP调用非Dapr端点
使用服务调用从 Dapr 应用程序调用非 Dapr 端点
本文演示如何使用Dapr通过HTTP调用非Dapr端点。
使用 Dapr 的服务调用 API,您可以与使用或不使用 Dapr 的端点进行通信。 使用 Dapr 调用不使用 Dapr 的端点不仅提供了一致的 API,还提供以下Dapr服务调用的好处:
- 应用弹性策略的能力
- 使用跟踪 & metrics的可观测性
- 通过作用域进行安全访问控制
- 能够利用中间件管道组件
- 服务发现
- 通过使用headers进行身份验证
HTTP服务调用到外部服务或非Dapr端点
有时候你需要调用一个非 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 sidecar。
- Dapr 使用
HTTPEndpoint
或 FQDN URL 来发现 Service B 的位置。 - Dapr 将消息转发至服务 B。
- Service 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
在调用 Dapr 启用的应用程序时使用 appId
AppID 始终用于调用 Dapr 应用程序,使用 appID
和 my-method
。 阅读操作方法:使用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 终端点。