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 只能由 数字、字母和三个特殊字符“-_.”组成,大写字母会自动被转为小写字母。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 01:24:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 01:24:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 01:24:02       82 阅读
  4. Python语言-面向对象

    2024-02-19 01:24:02       91 阅读

热门阅读

  1. linux 中date 命令的用法

    2024-02-19 01:24:02       54 阅读
  2. MySQL正则表达式

    2024-02-19 01:24:02       63 阅读
  3. vue3-使用 Vue 的多种方式

    2024-02-19 01:24:02       52 阅读
  4. 2024年2月新加坡-马来西亚游-简记

    2024-02-19 01:24:02       53 阅读
  5. 学习Android的第十二天

    2024-02-19 01:24:02       49 阅读
  6. C# 只允许开启一个exe程序

    2024-02-19 01:24:02       49 阅读
  7. [C++] 分支优化

    2024-02-19 01:24:02       49 阅读
  8. Leetcode-1523. 在区间范围内统计奇数数目

    2024-02-19 01:24:02       50 阅读