rpc

package
v1.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 11, 2026 License: MIT Imports: 10 Imported by: 0

README

RPC

rpc 包提供了标准化的 RPC 调用封装与响应处理工具。

设计理念

本包聚焦两件事:

  • 统一创建“服务调用下游服务”的出站 context.Context(metadata 透传、服务身份注入、超时控制)。
  • 统一构造 gRPC Client 连接选项(默认启用 OpenTelemetry gRPC client stats handler)。

常用入口

创建 gRPC ClientConn

NewGrpcClient 默认对连接启用 otelgrpc.NewClientHandler(),用于自动注入/提取 W3C traceparent(链路追踪)与采集指标。

构造出站 Context

ServiceContext 用于构建服务级别静态 metadata,并提供三种出站 ctx 构造方法:

  • WithPureContext:纯净出站 ctx(不继承请求 metadata),适合定时任务/后台任务。
  • WithExternalContext:基于外部传入 md 合并服务静态 metadata,适合消息队列/Webhook 等入口。
  • WithInheritContext:继承 parent 的 metadata 与 span context,再合并服务静态 metadata,适合处理请求时继续调用下游服务。

Documentation

Overview

Package rpc 提供标准化的 RPC 调用封装与响应处理工具。

Index

Constants

View Source
const MetaKeyParseErrorFormat = "%s 解析失败"

MetaKeyParseErrorFormat 用于构造元信息缺失/解析失败的错误文本。

Variables

View Source
var (
	// ErrRemoteResponseIsNil 表示远程调用返回的响应对象为空。
	ErrRemoteResponseIsNil = errors.New("远程响应为空")
	// ErrRemoteCallFailed 表示远程调用失败但未返回可读错误信息。
	ErrRemoteCallFailed = errors.New("远程调用失败")
)

Functions

func NewGrpcClient added in v1.1.8

func NewGrpcClient(bootstrapConf config.BootstrapConfig) (*grpc.ClientConn, error)

func ParseMetaKey

func ParseMetaKey(md metadata.MD, key string) (string, error)

ParseMetaKey 解析元信息 key。

Types

type ServiceContext added in v1.1.2

type ServiceContext struct {
	// contains filtered or unexported fields
}

ServiceContext 持有服务级别的静态元信息,用于构造服务间调用的出站上下文。 应在服务启动时初始化一次,作为单例注入或封装进中间件使用。

func NewServiceContext added in v1.1.2

func NewServiceContext(bootstrapConf config.BootstrapConfig) *ServiceContext

NewServiceContext 初始化服务上下文。 基于启动配置构建服务级别的静态 metadata,后续每次远程调用都会以此为基础进行扩展。

func (*ServiceContext) BuildServiceMetadata added in v1.1.6

func (sc *ServiceContext) BuildServiceMetadata() metadata.MD

BuildServiceMetadata 构建服务级别的静态元信息。

func (*ServiceContext) GetMetadata added in v1.1.3

func (sc *ServiceContext) GetMetadata() metadata.MD

GetMetadata 返回服务静态元信息的副本。

func (*ServiceContext) MergeServiceMetadata added in v1.1.6

func (sc *ServiceContext) MergeServiceMetadata(md metadata.MD) metadata.MD

MergeServiceMetadata 将本服务的静态元信息合并进目标 md。 RouteMethod 已存在时不覆盖,其余字段一律以服务静态值为准。

func (*ServiceContext) NewOutgoingContext added in v1.1.6

func (sc *ServiceContext) NewOutgoingContext(md metadata.MD, timeout time.Duration) (context.Context, context.CancelFunc)

NewOutgoingContext 将 metadata 写入新的出站上下文,并附加超时控制。

func (*ServiceContext) NewOutgoingContextFrom added in v1.1.8

func (sc *ServiceContext) NewOutgoingContextFrom(base context.Context, md metadata.MD, timeout time.Duration) (context.Context, context.CancelFunc)

NewOutgoingContextFrom 基于 base 创建出站上下文,并附加 metadata 与超时控制。

func (*ServiceContext) WithExternalContext added in v1.1.6

func (sc *ServiceContext) WithExternalContext(md metadata.MD, timeout time.Duration) (context.Context, context.CancelFunc)

WithExternalContext 将外部传入的 metadata 与本服务静态元信息合并,构造出站上下文。

func (*ServiceContext) WithInheritContext added in v1.1.2

func (sc *ServiceContext) WithInheritContext(parent context.Context, timeout time.Duration) (context.Context, context.CancelFunc)

WithInheritContext 在父上下文的基础上,创建携带完整链路信息的出站上下文。

func (*ServiceContext) WithPureContext added in v1.1.2

func (sc *ServiceContext) WithPureContext(timeout time.Duration) (context.Context, context.CancelFunc)

WithPureContext 创建一个与调用方请求完全隔离的纯净出站上下文。

type UserContextMeta

type UserContextMeta struct {
	Session  string `json:"session"`
	ClientIp string `json:"client_ip"`

	UserId   string `json:"user_id"`
	AppId    string `json:"app_id"`
	TenantId string `json:"tenant_id"`

	RoleIds []string `json:"role_ids"`
	OrgIds  []string `json:"org_ids"`
}

UserContextMeta 表示用户元信息

func ParseUserContextMeta

func ParseUserContextMeta(md metadata.MD) (raw *UserContextMeta, err error)

ParseUserContextMeta 解析用户上下文元信息。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL