gRPC 封装client

本文介绍了如何在Go语言中实现RPC客户端,通过`workload.WorkloadServiceClient`与服务器进行交互,并展示了初始化连接和管理器模块的实践。重点在于描述了`Dial`函数的使用和`InitConnections`的设置,以及`manager`模块中如何整合这些连接以提供API服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rpc-client/client.go



package rpc_clients

import (
	"context"
	"google.golang.org/grpc"
	"lch-tests/protobufs/workload"
	"log"
	"time"
)

var (
	WorkloadClient workload.WorkloadServiceClient
)

type Conn struct {
	clientConn  *grpc.ClientConn
	callTimeOut time.Duration
}

func InitConnections(addr string) {
	cc := GetConn(addr)
	WorkloadClient = workload.NewWorkloadServiceClient(cc)
}

func GetConn(addr string) *grpc.ClientConn {
	c := &Conn{
		callTimeOut: 3 * time.Second,
	}
	c.Dial(addr)
	return c.clientConn
}

func (c *Conn) Dial(addr string) error {
	ctx, cancel := context.WithTimeout(context.Background(), c.callTimeOut)
	defer cancel()

	var err error
	c.clientConn, err = grpc.DialContext(ctx, addr, grpc.WithInsecure())
	if err != nil {
		log.Printf("dial rpc error:%s", err.Error())
	}
	return nil
}

manager/manager.go



package manager

import (
	"context"

	"github.com/gin-gonic/gin"
	"lch-tests/handler"
	"lch-tests/kube"
	rpcClient "lch-tests/rpc-clients"
)

const (
	addr = "192.168.2.331:31878"
)

func Main(ctx context.Context) error {
	// 初始化kube配置信息
	kube.InitKube()

	// 初始化rpc连接
	rpcClient.InitConnections(addr)

	engine := gin.New()
	handler := &handler.Handler{}
	engine.GET("/home", handler.Home)
	return engine.Run()
}

 

在前端使用GRPCgRPC,高性能、开源的RPC框架)时,通常需要对基本的请求方法进行封装,以便于在各种场景下调用服务。以下是创建通用请求方法的一般步骤: 1. 引入依赖:首先安装gRPC客户端库,例如在TypeScript项目中,可能会引入`@grpc/grpc-js`或`@grpc/web`(针对Web环境)。 2. 定义Service:在前端定义一个代表后端服务的JavaScript接口(常称为.proto文件),描述你要调用的服务方法和消息结构。 3. 创建Client:创建一个gRPC客户端实例,传入后端服务器地址和服务名。 4. 编写封装方法:创建一个函数,接收必要的参数(通常是请求体和回调函数),然后使用`client.methodName()`调用对应的GRPC方法。这个函数可以处理错误处理、序列化/反序列化数据以及发起网络请求。 ```typescript import * as grpc from '@grpc/grpc-js'; // 假设有个名为UserService的Service const userServiceProto = ...; // 应从.proto文件加载 async function call GRPCAPI(methodName: string, request: any, callback: (response: any) => void): Promise<void> { const client = new UserService(yourGrpcEndpoint, grpc.credentials.createInsecure()); try { const response = await client[methodName](request); callback(response); } catch (error) { console.error('Error while calling gRPC API:', error); callback(null); // 或者按需处理错误 } } ``` 5. 使用封装后的函数:现在可以在前端应用中多次调用`callGRPCAPI`,只需要提供对应的服务方法名称、请求对象和处理响应的回调。 ```typescript callGRPCAPI('getUser', { userId: '123' }, (response) => { if (response) { // 处理返回的用户信息 } else { // 处理错误 } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值