本文介绍如何使用唯一的应用程序 ID 部署每个服务,以便其他服务可以使用服务调用 API 发现和调用这些终结点。
Dapr 允许您为您的应用分配一个全局唯一ID。 此 ID 为您的应用程序封装了状态,不管它可能有多少实例。
在自托管方式下,设置 --app-id
标记:
dapr run --app-id cart --app-port 5000 python app.py
如果您的应用使用 SSL 连接,您可以告诉Dapr 在不安全的 SSL 连接中调用您的应用:
dapr run --app-id cart --app-port 5000 --app-ssl python app.py
在 Kubernetes 中,在您的pod 上设置 dapr.io/app-id
注解:
apiVersion: apps/v1
kind: Deployment
metadata:
name: python-app
namespace: default
labels:
app: python-app
spec:
replicas: 1
selector:
matchLabels:
app: python-app
template:
metadata:
labels:
app: python-app
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "cart"
dapr.io/app-port: "5000"
...
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)
以下是购物车应用的 Python 示例。 它可以用任何编程语言编写。
from flask import Flask
app = Flask(__name__)
@app.route('/add', methods=['POST'])
def add():
return "Added!"
if __name__ == '__main__':
app.run()
此 Python 应用程序通过 /add()
端点暴露了一个 add()
方法。
Dapr 采用边车(sidecar)、去中心化的架构。 要使用 Dapr 调用应用程序,您可以在任意 Dapr 实例中使用 调用
API。
sidecar 编程模型鼓励每个应用程序与自己的 Dapr 实例对话。 Dapr 实例会相互发现并进行通信。
从一个终端或命令提示运行:
curl http://localhost:3500/v1.0/invoke/cart/method/add -X POST
由于 add 端点是一个“POST”方法,我们在 curl 命令中使用了 -X POST
。
要调用 “GET” 端点:
curl http://localhost:3500/v1.0/invoke/cart/method/add
要调用 “DELETE” 端点:
curl http://localhost:3500/v1.0/invoke/cart/method/add -X DELETE
Dapr 将调用的服务返回的任何有效负载放在 HTTP 响应的消息体中。
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 服务:
curl http://localhost:3500/v1.0/invoke/cart.production/method/add -X POST
See the Cross namespace API spec for more information on namespaces.
上面的示例显示了如何直接调用本地或 Kubernetes 中运行的其他服务。 Dapr 输出指标、跟踪和日志记录信息,允许您可视化服务之间的调用图、日志错误和可选地记录有效负载正文。
For more information on tracing and logs see the observability article.
相关链接