当前位置:网站首页>grpc-middleware实现grpc调用重试
grpc-middleware实现grpc调用重试
2022-07-21 16:50:00 【.番茄炒蛋】
proto
syntax = "proto3";
option go_package = ".;proto";
package proto;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
生成对应的go代码
protoc -I . demo.proto --go_out=plugins=grpc:.
server
package main
import (
"ShopBefore/rpc/grpc_retry/proto"
"context"
"google.golang.org/grpc"
"log"
"net"
"time"
)
type Server struct{
}
func (s Server) SayHello(ctx context.Context, request *proto.HelloRequest) (*proto.HelloResponse, error) {
log.Println("收到请求.....")
// 设置一秒超时,再接口这里休眠两秒
time.Sleep(2 * time.Second)
return &proto.HelloResponse{
Message: "Hello" + request.Name}, nil
}
func main() {
server := grpc.NewServer()
proto.RegisterGreeterServer(server, &Server{
})
listen, err := net.Listen("tcp", ":8081")
if err != nil {
panic(err)
}
err = server.Serve(listen)
if err != nil {
panic(err)
}
}
client
package main
import (
"ShopBefore/rpc/grpc_retry/proto"
"context"
"fmt"
"github.com/grpc-ecosystem/go-grpc-middleware/retry"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/credentials/insecure"
"time"
)
func main() {
retryOpts := []grpc_retry.CallOption{
// 最大重试次数
grpc_retry.WithMax(3),
// 超时时间
grpc_retry.WithPerRetryTimeout(1 * time.Second),
// 只有返回对应的code才会执行重试
grpc_retry.WithCodes(codes.Unknown, codes.DeadlineExceeded, codes.Unavailable),
}
conn, err := grpc.Dial("127.0.0.1:8081",
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithUnaryInterceptor(grpc_retry.UnaryClientInterceptor(retryOpts...)))
defer func(conn *grpc.ClientConn) {
err := conn.Close()
if err != nil {
panic(err)
}
}(conn)
if err != nil {
panic(err)
}
client := proto.NewGreeterClient(conn)
hello, err := client.SayHello(context.Background(), &proto.HelloRequest{
Name: "番茄炒蛋"})
if err != nil {
panic(err)
}
fmt.Println(hello)
}
测试
server
client
client发送一次请求,由于每次都会超时,进入重试,server确实收到了三次请求.最后client报超时的错也是正常的
边栏推荐
猜你喜欢
小波变换中的多贝西小波(DB小波函数)概述
Geek planet ByteDance one stop data governance solution and platform architecture
Jmter -- database performance test
mysql的binlog
After reading this, I can't DVMA yet. Please eat melon
MySql中on与where的区别个人总结——分清楚条件应该写在哪里
为什么都说考完二建就要去准备一建,这几点你一定不知道!
CDH 6.1 环境搭建图文教程
各种各样的搜索(⊙ ▽ ⊙)巩固提升之章
JMeter --- FTP performance test
随机推荐
“万物互联,使能千行百业”,2022 开放原子全球开源峰会 OpenAtom OpenHarmony 分论坛即将开幕
百面机器学习总结
如何在浏览器中使用 Blob 对象进行缓存
架构师进阶,微服务设计与治理的 16 条常用原则
性能测试----测试执行
企业统一社会信用代码规则
R语言ggplot2可视化:可视化散点图并为散点图中的数据点添加公式标签、使用ggrepel包的geom_text_repel函数避免数据点公式标签互相重叠(添加公式标签)
UNet详解(附图文和代码实现)
DS图—最小生成树
快速傅里叶变换 ,拉格朗日插值法,三千字附例题,姊妹篇FFT与字符串匹配的应用
Dubai launches national meta universe strategy
一个公用的dao类和util
leetcode-09(下一个排列+快乐数+全排列)
Generating function (linear recursive relationship, generating function concept and formula derivation, violent calculation) 4000 word detailed analysis, with examples
Spark 读取csv文件操作,option参数解释
Tell me, is it convenient to find someone to open a stock account? Excuse me, is it safe to open a stock account by mobile phone?
DS排序--快速排序
两个元素的矩阵乘除法「建议收藏」
DistSQL 深度解析:打造动态化的分布式数据库
AttributeError:module ‘distutils’ has no attribute ‘version错误解决方法