Dapr的gRPC接口
Dapr 和 gRPC
Dapr 为本地调用实现 HTTP 和 gRPC API 。 gRPC适用于低延迟、高性能的场景,并且使用原生客户端进行语言集成。
您可以在 这里找到自动生成的客户端 的列表。
Dapr 运行时实现 ,应用程序可以通过 gRPC 进行通信。
除了通过 gRPC 调用 Dapr , Dapr 也可以通过 gRPC 与应用程序通信。 要做到这一点,应用程序需要托管一个gRPC服务器,并实现Dapr appcallback服务。
这将告诉Dapr通过gRPC与您的应用程序通过5005
端口进行通信。
Kubernetes
在Kubernetes中,需要在deployment YAML文件中设置以下注解:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: default
labels:
app: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "myapp"
dapr.io/app-protocol: "grpc"
dapr.io/app-port: "5005"
下面的步骤显示了如何创建 Dapr 客户端并调用 SaveStateData
操作:
- 导入包
import (
"context"
"log"
"os"
dapr "github.com/dapr/go-sdk/client"
)
- 创建客户端
- 调用 “ SaveState “ 方法
// 保存key1的状态
err = client.SaveState(ctx, "statestore", "key1", data)
if err != nil {
log.Panic(err)
}
log.Println("data saved")
好耶!
以下步骤将向您显示如何创建一个让Dapr服务器与之通信的应用程序。
- 导入包
package main
import (
"context"
"fmt"
"log"
"net"
"github.com/golang/protobuf/ptypes/any"
commonv1pb "github.com/dapr/go-sdk/dapr/proto/common/v1"
pb "github.com/dapr/go-sdk/dapr/proto/runtime/v1"
"google.golang.org/grpc"
)
- 实现接口
- 创建服务器
func main() {
// create listener
lis, err := net.Listen("tcp", ":50001")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// create grpc server
s := grpc.NewServer()
pb.RegisterAppCallbackServer(s, &server{})
fmt.Println("Client starting...")
// 启动......
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
这将在4000 端口上为应用程序创建一个 gRPC 服务器。
- 运行你的应用
使用 Dapr CLI在本地运行:
dapr run --app-id goapp --app-port 4000 --app-protocol grpc go run main.go
Kubernetes 中,必须在您的Pod规范文档中进行如下设置: dapr.io/app-protocol: "grpc"
和 。
相关主题