入门指南:发现并调用服务

入门指南指导如何使用 Dapr 服务在分布式应用程序中调用其它服务

本文介绍如何使用唯一的应用程序 ID 部署每个服务,以便其他服务可以使用服务调用 API 发现和调用这些终结点。

步骤 1: 为服务选择标识

Dapr 允许您为您的应用分配一个全局唯一ID。 此 ID 为您的应用程序封装了状态,不管它可能有多少实例。

在自托管方式下,设置 --app-id 标记:

  1. dapr run --app-id cart --app-port 5000 python app.py

如果您的应用使用 SSL 连接,您可以告诉Dapr 在不安全的 SSL 连接中调用您的应用:

  1. dapr run --app-id cart --app-port 5000 --app-ssl python app.py

使用 Kubernetes 设置标识

在 Kubernetes 中,在您的pod 上设置 dapr.io/app-id 注解:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: python-app
  5. namespace: default
  6. labels:
  7. app: python-app
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: python-app
  13. template:
  14. metadata:
  15. labels:
  16. app: python-app
  17. annotations:
  18. dapr.io/enabled: "true"
  19. dapr.io/app-id: "cart"
  20. dapr.io/app-port: "5000"
  21. ...

If your app uses an SSL connection, you can tell Dapr to invoke your app over an insecure SSL connection with the app-ssl: "true" annotation (full list here)

步骤 2: 设置服务

以下是购物车应用的 Python 示例。 它可以用任何编程语言编写。

  1. from flask import Flask
  2. app = Flask(__name__)
  3. @app.route('/add', methods=['POST'])
  4. def add():
  5. return "Added!"
  6. if __name__ == '__main__':
  7. app.run()

此 Python 应用程序通过 /add() 端点暴露了一个 add() 方法。

步骤 3: 调用服务

Dapr 采用边车(sidecar)、去中心化的架构。 要使用 Dapr 调用应用程序,您可以在任意 Dapr 实例中使用 调用 API。

sidecar 编程模型鼓励每个应用程序与自己的 Dapr 实例对话。 Dapr 实例会相互发现并进行通信。

从一个终端或命令提示运行:

  1. curl http://localhost:3500/v1.0/invoke/cart/method/add -X POST

由于 add 端点是一个“POST”方法,我们在 curl 命令中使用了 -X POST

要调用 “GET” 端点:

  1. curl http://localhost:3500/v1.0/invoke/cart/method/add

要调用 “DELETE” 端点:

  1. curl http://localhost:3500/v1.0/invoke/cart/method/add -X DELETE

Dapr 将调用的服务返回的任何有效负载放在 HTTP 响应的消息体中。

  1. dapr invoke --app-id cart --method add

命名空间

When running on namespace supported platforms, you include the namespace of the target app in the app ID: myApp.production

例如,调用包含名称空间的示例 python 服务:

  1. curl http://localhost:3500/v1.0/invoke/cart.production/method/add -X POST

See the Cross namespace API spec for more information on namespaces.

步骤 4: 查看跟踪和日志

上面的示例显示了如何直接调用本地或 Kubernetes 中运行的其他服务。 Dapr 输出指标、跟踪和日志记录信息,允许您可视化服务之间的调用图、日志错误和可选地记录有效负载正文。

For more information on tracing and logs see the observability article.

相关链接