client

package module
v0.0.9 Latest Latest
Warning

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

Go to latest
Published: Sep 5, 2026 License: MIT Imports: 40 Imported by: 0

README

Admin Client

client 只负责根据 kratos-kit/api 的客户端配置初始化 gRPC 连接,不封装具体业务客户端。

connection, cleanup, err := client.NewConnection(ctx, clientConfig)
if err != nil {
	return err
}
defer cleanup()

userClient := systemadminv1.NewBaseUserServiceClient(connection)
response, err := userClient.GetBaseUser(ctx, request)

配置示例:

client:
  grpc:
    # 本地或远程直连地址。
    endpoint: 127.0.0.1:6001
    middleware:
      retry:
        max_attempts: 3
        initial_backoff: 200ms
        max_backoff: 10s
        backoff_factor: 2
        idempotent_prefixes: [Get, List, Search]
        retry_codes: [UNAVAILABLE]
      rate_limiter:
        tokens_per_second: 100
        burst: 200
        wait: false
      metrics:
        namespace: application
        subsystem: grpc_client

普通地址用于本机或远程直连。使用 discovery:///服务名 时,通过 client.WithDiscovery(discovery) 注入注册中心发现器。timeouttls、静态 metadata、JWT、熔断、日志、链路追踪和负载均衡等配置由当前 client 模块统一处理;额外的 Kratos 客户端中间件通过 client.WithMiddleware 传入,原生 gRPC 客户端拦截器通过 client.WithUnaryInterceptorclient.WithStreamInterceptor 传入。客户端中间件按请求 ID、恢复、追踪、metadata、日志、熔断、认证、业务自定义的顺序组装;配置拦截器按 metrics、retry、ratelimit 顺序执行,使指标覆盖完整逻辑调用,并让每次重试尝试都经过限流。流式调用不自动重试,只启用 metrics 和 ratelimit,并在建流前执行一次 middleware、传播 transport 请求头。负载均衡器是进程级配置,同一进程中的连接必须使用同一种策略。

retryrate_limitermetrics 配置对象存在即启用对应拦截器。retry 未配置具体参数时使用 3 次尝试、200ms 初始退避、2 倍退避和 10s 单次退避上限,只重试 GetListSearch 前缀方法返回的 UNAVAILABLE。rate_limiter 使用令牌桶,启用时 tokens_per_secondburst 必须大于 0。metrics 注册到进程默认 Prometheus Registry,subsystem 为空时使用 grpc_client

connection, cleanup, err := client.NewConnection(
	ctx,
	clientConfig,
	client.WithMiddleware(customMiddleware),
	client.WithUnaryInterceptor(customUnaryInterceptor),
	client.WithStreamInterceptor(customStreamInterceptor),
)
if err != nil {
	return err
}
defer cleanup()

clientclient.grpcclient.grpc.endpoint 为空时,NewConnection 创建进程内客户端,不建立网络连接。需要调用进程内服务时,通过 WithLocalServices 注册服务:

connection, cleanup, err := client.NewConnection(ctx, nil, client.WithLocalServices(modules.RegisterGRPC))
if err != nil {
	return err
}
defer cleanup()

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CreateGrpcClient added in v0.0.2

func CreateGrpcClient(ctx context.Context, discovery registry.Discovery, serviceName string, config *configv1.Bootstrap, middlewares ...middleware.Middleware) (grpc.ClientConnInterface, error)

CreateGrpcClient 根据服务名或配置地址创建 gRPC 客户端。

Types

type Connection

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

Connection 统一适配 Admin 的 gRPC 客户端连接。

func NewConnection

func NewConnection(ctx context.Context, clientConfig *configv1.Client, options ...Option) (*Connection, func(), error)

NewConnection 根据客户端配置初始化 gRPC 客户端连接。 endpoint 使用普通地址时直连本地或远程服务,使用 discovery:/// 前缀时通过 WithDiscovery 注入的注册中心发现服务;客户端配置为空时创建进程内连接。

func (*Connection) ClientConn

func (c *Connection) ClientConn() grpc.ClientConnInterface

ClientConn 返回底层的 gRPC 客户端连接接口。

func (*Connection) Invoke

func (c *Connection) Invoke(ctx context.Context, method string, args any, reply any, options ...grpc.CallOption) error

Invoke 将一元 RPC 调用转发给当前连接。

func (*Connection) NewStream

func (c *Connection) NewStream(ctx context.Context, desc *grpc.StreamDesc, method string, options ...grpc.CallOption) (grpc.ClientStream, error)

NewStream 将流式 RPC 调用转发给当前连接。

type LocalServiceRegistrar

type LocalServiceRegistrar func(grpc.ServiceRegistrar)

LocalServiceRegistrar 描述向进程内 gRPC 客户端注册服务的函数。

type Option

type Option func(*connectionOptions)

Option 配置客户端连接的可选依赖。

func WithDiscovery

func WithDiscovery(discovery registry.Discovery) Option

WithDiscovery 为使用 discovery:/// 地址的客户端连接注入服务发现器。

func WithLocalServices

func WithLocalServices(registrars ...LocalServiceRegistrar) Option

WithLocalServices 配置进程内 gRPC 客户端需要注册的服务。

func WithMiddleware added in v0.0.2

func WithMiddleware(middlewares ...middleware.Middleware) Option

WithMiddleware 为 gRPC 客户端连接追加 Kratos 客户端中间件。

func WithStreamInterceptor added in v0.0.3

func WithStreamInterceptor(interceptors ...grpc.StreamClientInterceptor) Option

WithStreamInterceptor 为 gRPC 客户端连接追加 stream 客户端拦截器。

func WithUnaryInterceptor added in v0.0.3

func WithUnaryInterceptor(interceptors ...grpc.UnaryClientInterceptor) Option

WithUnaryInterceptor 为 gRPC 客户端连接追加 unary 客户端拦截器。

Directories

Path Synopsis
middleware
metrics
Package metrics 提供 gRPC 客户端请求指标拦截器。
Package metrics 提供 gRPC 客户端请求指标拦截器。
ratelimit
Package ratelimit 提供 gRPC 客户端请求限流拦截器。
Package ratelimit 提供 gRPC 客户端请求限流拦截器。
requestid
Package requestid 提供跨 HTTP 和 gRPC 的请求标识生成与透传中间件。
Package requestid 提供跨 HTTP 和 gRPC 的请求标识生成与透传中间件。
retry
Package retry 提供 gRPC 客户端一元请求重试拦截器。
Package retry 提供 gRPC 客户端一元请求重试拦截器。

Jump to

Keyboard shortcuts

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