gRPC客户端
x/grpcClient
组件:v0.25.0+ gRPC客户端。允许动态调用gRPC服务。
gRPC 服务端必须注册gRPC 反射服务。允许客户端在运行时查询服务器支持的服务和方法。
# 配置
该组件允许通关过server
字段复用共享的连接客户端。参考组件连接复用 。
字段 | 类型 | 说明 | 默认值 |
---|---|---|---|
server | string | gGPC服务地址,格式: 主机名:端口 | 无 |
service | string | gRPC 服务名称,可以使用组件配置变量 | 无 |
method | string | gRPC 方法名称,可以使用组件配置变量 | 无 |
request | string | 请求参数,如果空则使用当前消息负荷。参数通过JSON编码,必须和 service/method 要求的一致 | 无 |
headers | map | 请求头,可以使用组件配置变量 |
# Relation Type
- Success: 执行成功,把消息发送到
Success
链 - Failure: 执行失败,把消息发送到
Failure
链
# 执行结果
查询返回赋值到消息负荷传递到下一个节点。
# 示例
- 定义一个gRPC服务,如下:
syntax = "proto3";
package helloworld;
option go_package = ".;helloworld";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 生成protobuf代码
protoc --go_out=. --go-grpc_out=. helloworld.proto
1
- 运行服务端
package main
import (
"context"
pb "github.com/rulego/rulego-components/external/grpc/testdata/helloworld"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
"log"
"net"
)
// server 是 Greeter 服务的服务器实现
type server struct {
pb.UnimplementedGreeterServer
}
// SayHello 实现 Greeter 服务的 SayHello 方法
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
// 从上下文中获取元数据
md, ok := metadata.FromIncomingContext(ctx)
if ok {
// 打印所有头部信息
for key, values := range md {
log.Printf("Header %s: %v", key, values)
}
}
log.Printf("Received: %v", in.GetName())
return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
}
func main() {
listen, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})
// 注册 gRPC 反射服务
reflection.Register(s)
//启动服务
if err := s.Serve(listen); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
- 通过grpcClient组件调用服务端
{
"id": "s1",
"type": "x/grpcClient",
"name": "call grpc service",
"configuration": {
"server": "127.0.0.1:50051",
"service": "helloworld.Greeter",
"method": "SayHello",
"request": "{\"name\": \"lulu\"}"
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
在 GitHub 上编辑此页 (opens new window)
上次更新: 2024/10/29, 13:25:01