rpc

package
v0.9.2 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2026 License: MIT Imports: 8 Imported by: 0

README

RPC

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

设计理念

本包旨在统一处理微服务间的响应格式,遵循 Code/Message/Data 模式:

  • Code:业务状态码(200 表示成功)。
  • Message:业务提示信息。
  • Data:实际业务数据。

核心功能

WithRemoteInvoke

泛型函数,用于发起远程调用并自动处理响应解包。

处理逻辑

  1. 网络错误:直接返回 error
  2. Nil 检查:防御性处理“带类型的 nil”。
  3. 业务错误:若 Code != 200,提取 Message 并封装为 error 返回。
  4. 成功:仅返回 Data 部分。

使用示例

假设 Proto 定义如下:

message GetUserResponse {
    uint32 code = 1;
    string message = 2;
    User data = 3;
}

调用代码:

import "github.com/fireflycore/go-micro/rpc"

// T:业务数据类型(pb.User)
// R:响应类型(*pb.GetUserResponse),需实现 rpc.RemoteResponse[pb.User]
user, err := rpc.WithRemoteInvoke[pb.User, *pb.GetUserResponse](func() (*pb.GetUserResponse, error) {
	return client.GetUser(ctx, &pb.GetUserRequest{Id: 1})
})

if err != nil {
	// 处理网络错误或业务错误(Code != 200)
	return err
}

// 直接使用 user 对象
fmt.Println(user.Name)

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 ParseMetaKey

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

ParseMetaKey 解析元信息 key。

func SetRemoteInvokeServiceAfterContext added in v0.7.9

func SetRemoteInvokeServiceAfterContext(ctx context.Context, appId, endpoint string) context.Context

SetRemoteInvokeServiceAfterContext 设置远程调用后置上下文

func SetRemoteInvokeServiceBeforeContext added in v0.7.9

func SetRemoteInvokeServiceBeforeContext(ctx context.Context, bootstrapConf conf.BootstrapConf) context.Context

SetRemoteInvokeServiceBeforeContext 设置远程调用前置上下文

func WithRemoteInvoke

func WithRemoteInvoke[T any, R RemoteResponse[T]](callFunc func() (R, error)) (T, error)

WithRemoteInvoke 执行远程调用并处理标准化响应。 T: 业务数据类型 R: 响应类型,必须实现 RemoteResponse[T] 接口

Types

type ClientContextMeta

type ClientContextMeta struct {
	ClientIp    string `json:"client_ip"`
	AppVersion  string `json:"app_version"`
	AppLanguage string `json:"app_language"`
}

ClientContextMeta 表示客户端上下文元信息。

func ParseClientContextMeta

func ParseClientContextMeta(md metadata.MD) (raw *ClientContextMeta, err error)

ParseClientContextMeta 解析客户端上下文元信息。

type RemoteResponse

type RemoteResponse[T any] interface {
	GetCode() uint32    // 获取状态码
	GetMessage() string // 获取消息文本
	GetData() T         // 获取业务数据
}

RemoteResponse 定义远程调用响应的标准接口。

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