go-zero/grpc的rpc服务间传递额外数据

这篇具有很好参考价值的文章主要介绍了go-zero/grpc的rpc服务间传递额外数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

go-zero/grpc的rpc服务间传递额外数据

2024/02/18

客户端:

md := metadata.New(map[string]string{"signature": "0123456789", "timestamp": "2021-07-01 00:00:00"})
ctx := metadata.NewOutgoingContext(ctx, md)
addResp, err := adderClient.Add(ctx, addReq) // rpc 调用

初始化 md 也可如下方式:

md := metadata.Pairs(
	"signature", "0123456789",
	"timestamp", "2021-07-01 00:00:00",
)
ctx := metadata.NewOutgoingContext(ctx, md)
addResp, err := adderClient.Add(ctx, addReq) // rpc 调用

追加新的如下:

ctx = metadata.AppendToOutgoingContext(ctx, "noncestr", "abc")

也可使用 md 的 Set 和 Append 方法追加:

md.Set("extra", "extra-value")
md.Append("append", "append-value")

服务端:

md, _ := metadata.FromIncomingContext(ctx)
或直接:
vals := metadata.ValueFromIncomingContext(ctx, "signature")

注意 key 都会被转为小写,即使客户端为大写:

// Keys beginning with "grpc-" are reserved for grpc-internal use only and may
// result in errors if set in metadata.
func New(m map[string]string) MD {
	md := make(MD, len(m))
	for k, val := range m {
		key := strings.ToLower(k)
		md[key] = append(md[key], val)
	}
	return md
}

func Pairs(kv ...string) MD {
	if len(kv)%2 == 1 {
		panic(fmt.Sprintf("metadata: Pairs got the odd number of input pairs for metadata: %d", len(kv)))
	}
	md := make(MD, len(kv)/2)
	for i := 0; i < len(kv); i += 2 {
		key := strings.ToLower(kv[i])
		md[key] = append(md[key], kv[i+1])
	}
	return md
}

func (md MD) Set(k string, vals ...string) {
	if len(vals) == 0 {
		return
	}
	k = strings.ToLower(k)
	md[k] = vals
}

而且 key 只能由 数字、字母和三个特殊字符“-_.”组成,大写字母会自动被转为小写字母。文章来源地址https://www.toymoban.com/news/detail-826801.html

到了这里,关于go-zero/grpc的rpc服务间传递额外数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go-zero踩坑:在api层逻辑代码中设置context超时时间,传递到rpc层逻辑代码时设置的context超时时间消失 + api层和rpc层Timeout配置说明

    在api层逻辑代码中设置context超时时间,传递到rpc层逻辑代码时设置的context超时时间消失 我在用 go-zero 时,在 api 层传递 context 到 rpc 层,但报错: rpc error:DeadlineExceeded desc = context deadline exceeded ,这是 上下文超时 导致的(客户端用的上下文是 context.WithTimeout 超时时间 小于

    2024年02月11日
    浏览(62)
  • go-zero微服务实战——服务构建

    接上一节go-zero微服务实战——基本环境搭建。搭建好了微服务的基本环境,开始构建整个微服务体系了,将其他服务也搭建起来。 order的目录结构,如下 根目录 api服务 rpc服务 自定义逻辑层logic 自定义参数层models 自定义工具层util api服务和rpc服务都是基于goctl一键生成的,当

    2024年02月14日
    浏览(47)
  • go-zero的服务发现源码阅读

    服务发现原理与grpc源码解析_wangxiaoangg的博客-CSDN博客   go-zero rpc demo官方文档:rpc编写与调用 | go-zero 目录 一 服务注册 1. 创建rpc服务 2. 启动rpc服务 3. registerEtcd做了什么 4. discov.NewPublisher 服务发布者 二 服务发现 1.定义注册resolver 2.解析etcd地址创建链接 3.update方法 在看rp

    2024年02月06日
    浏览(62)
  • 使用go-zero快速构建微服务

    本文是对 使用go-zero快速构建微服务 [1] 的亲手实践 编写API Gateway代码 mkdir api goctl api -o api/bookstore.api cd api goctl api go -api bookstore.api -dir . go run bookstore.go -f etc/bookstore-api.yaml 启动API Gateway服务,默认侦听在8888端口 因为默认生成的 api/etc/bookstore-api.yml 为: 按提示下载,再次运行

    2024年02月13日
    浏览(65)
  • go-zero学习 第三章 微服务

    1.1 API服务模块 goctl 使用 api 文件生成 api服务 命令: 1.2 RPC服务模块 goctl 使用 protoc 文件生成 rpc服务 命令: 注意: --go_out 、 --go-grpc_out 、 --zrpc_out 三者配置的路径需要完全一致,否则会报下列错误。 基础代码:已生成基本的API服务、RPC服务。 这里以API服务调用RPC服务的登

    2024年02月16日
    浏览(73)
  • 【go-zero】go-zero阿里云oss 前端上传文件到go-zero API服务 并在k8s pod中创建文件 并推送到阿里云oss 最佳实践

    问题:在本地通过上传文件,然后将文件推送到aliyun的oss中,是没问题的 但是部署到了k8s中,则出现了问题,一直报错没有创建的权限 思路:开始认为应该将该文件挂载到configmap中,然后通过这种方式修改了deployment和dockerfile。最终发现应该是go的创建文件路径方式搞错了,

    2024年02月13日
    浏览(48)
  • Go-Zero微服务快速入门和最佳实践(一)

    并发编程和分布式微服务 是我们Gopher升职加薪的关键。 毕竟Go基础很容易搞定,不管你是否有编程经验,都可以比较快速的入门Go语言进行简单项目的开发。 虽说好上手,但是想和别人拉开差距,提高自己的竞争力, 搞懂分布式微服务和并发编程还是灰常重要的,这也是我

    2024年04月28日
    浏览(42)
  • 微服务框架 go-zero logx 日志组件剖析

    上一篇我们说到咱们还剩下 addTenant 功能还未实现,不知道有没有兄弟感兴趣去实验一波的,本篇文章进行简要补充 根据上一篇文章分析,其实我们只需要执行如下几步即可: 编写 tenant.api,提供外部 addTenant 的 http 接口 编写 tenant.api 提供一个 POST http 的接口 / api /tenant/addt

    2024年02月11日
    浏览(50)
  • 微服务架构|go-zero 的自适应熔断器

    原文链接: go-zero 的自适应熔断器 上篇文章我们介绍了微服务的限流,详细分析了计数器限流和令牌桶限流算法,这篇文章来说说熔断。 熔断和限流还不太一样,限流是控制请求速率,只要还能承受,那么都会处理,但熔断不是。 在一条调用链上,如果发现某个服务异常,

    2024年02月10日
    浏览(53)
  • go-zero微服务实战——etcd服务注册与发现

    浅谈etcd服务注册与发现 etcd官网 etcd中文文档 apt安装etcd,启动命令十分简单 etcd 。 etcd分为v2版本和v3版本,命令有所不一样,使用命令 etcdctl h 查看 如上图所示并没有出现API的版本,此时是使用默认的v2版本,但是v2版本很多命令使用不了,因此切换为v3版本,命令如下: e

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包