Documentation
¶
Overview ¶
Package middleware provides gRPC metadata propagation middleware. Implements MetadataCarrier interface for gRPC metadata. Supports unary and stream interceptors for both client and server.
中间件包提供 gRPC 元数据传播中间件。 为 gRPC metadata 实现 MetadataCarrier 接口。 支持客户端和服务端的一元和流拦截器。
Package middleware provides HTTP metadata propagation middleware. Implements MetadataCarrier interface for HTTP headers. Supports automatic extraction and injection across HTTP boundaries.
中间件包提供 HTTP 元数据传播中间件。 为 HTTP headers 实现 MetadataCarrier 接口。 支持跨 HTTP 边界的自动提取和注入。
Index ¶
- func ExtractFromGinContext(ctx *gin.Context) transportcontract.Metadata
- func GetFromContext(ctx context.Context) (transportcontract.Metadata, bool)
- func GetGRPCMetadata(ctx context.Context) metadata.MD
- func GetHeaderValue(ctx context.Context, key string) string
- func InjectToGinContext(ctx *gin.Context, md transportcontract.Metadata)
- func MetadataMiddleware(propagator transportcontract.MetadataPropagator) transportcontract.Middleware
- func StreamClientInterceptor(propagator transportcontract.MetadataPropagator) grpc.StreamClientInterceptor
- func StreamServerInterceptor(propagator transportcontract.MetadataPropagator) grpc.StreamServerInterceptor
- func UnaryClientInterceptor(propagator transportcontract.MetadataPropagator) grpc.UnaryClientInterceptor
- func UnaryServerInterceptor(propagator transportcontract.MetadataPropagator) grpc.UnaryServerInterceptor
- type GRPCCarrier
- type HeaderCarrier
- type MetadataInjector
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ExtractFromGinContext ¶
func ExtractFromGinContext(ctx *gin.Context) transportcontract.Metadata
func GetFromContext ¶
func GetFromContext(ctx context.Context) (transportcontract.Metadata, bool)
func GetGRPCMetadata ¶
GetGRPCMetadata retrieves metadata from gRPC context (incoming or outgoing). Core logic: Try incoming context first, fallback to outgoing.
GetGRPCMetadata 从 gRPC context 获取元数据(incoming 或 outgoing)。 核心逻辑:先尝试 incoming context,回退到 outgoing。
func InjectToGinContext ¶
func InjectToGinContext(ctx *gin.Context, md transportcontract.Metadata)
func MetadataMiddleware ¶
func MetadataMiddleware(propagator transportcontract.MetadataPropagator) transportcontract.Middleware
MetadataMiddleware creates HTTP middleware for metadata extraction. Core logic: Extract metadata from request headers, inject into context.
MetadataMiddleware 创建 HTTP 中间件,用于提取元数据。 核心逻辑:从请求头提取元数据、注入到 context。
func StreamClientInterceptor ¶
func StreamClientInterceptor(propagator transportcontract.MetadataPropagator) grpc.StreamClientInterceptor
StreamClientInterceptor creates gRPC stream client interceptor for metadata injection. Core logic: Inject metadata into outgoing context before streaming.
StreamClientInterceptor 创建 gRPC 流客户端拦截器,用于注入元数据。 核心逻辑:在流调用前将元数据注入到 outgoing context。
func StreamServerInterceptor ¶
func StreamServerInterceptor(propagator transportcontract.MetadataPropagator) grpc.StreamServerInterceptor
StreamServerInterceptor creates gRPC stream server interceptor for metadata extraction. Core logic: Extract metadata, wrap stream with updated context.
StreamServerInterceptor 创建 gRPC 流服务端拦截器,用于提取元数据。 核心逻辑:提取元数据、用更新后的 context 包装 stream。
func UnaryClientInterceptor ¶
func UnaryClientInterceptor(propagator transportcontract.MetadataPropagator) grpc.UnaryClientInterceptor
UnaryClientInterceptor creates gRPC unary client interceptor for metadata injection. Core logic: Inject metadata into outgoing context before invoking.
UnaryClientInterceptor 创建 gRPC 一元客户端拦截器,用于注入元数据。 核心逻辑:在调用前将元数据注入到 outgoing context。
func UnaryServerInterceptor ¶
func UnaryServerInterceptor(propagator transportcontract.MetadataPropagator) grpc.UnaryServerInterceptor
UnaryServerInterceptor creates gRPC unary server interceptor for metadata extraction. Core logic: Extract metadata from incoming context, inject into handler context.
UnaryServerInterceptor 创建 gRPC 一元服务端拦截器,用于提取元数据。 核心逻辑:从 incoming context 提取元数据、注入到 handler context。
Types ¶
type GRPCCarrier ¶
type GRPCCarrier struct {
// contains filtered or unexported fields
}
GRPCCarrier wraps gRPC metadata.MD to implement MetadataCarrier interface. Core logic: Delegate Get/Set/Add operations to underlying metadata.MD.
GRPCCarrier 包装 gRPC metadata.MD,实现 MetadataCarrier 接口。 核心逻辑:将 Get/Set/Add 操作委托给底层 metadata.MD。
func NewGRPCCarrier ¶
func NewGRPCCarrier(md metadata.MD) *GRPCCarrier
NewGRPCCarrier creates a new GRPCCarrier with optional metadata. Core logic: Initialize metadata.MD if nil, wrap in carrier.
NewGRPCCarrier 创建新的 GRPCCarrier(可选 metadata)。 核心逻辑:若 metadata 为 nil 则初始化、包装为 carrier。
func (*GRPCCarrier) Add ¶
func (c *GRPCCarrier) Add(key, value string)
func (*GRPCCarrier) Get ¶
func (c *GRPCCarrier) Get(key string) string
func (*GRPCCarrier) Keys ¶
func (c *GRPCCarrier) Keys() []string
func (*GRPCCarrier) MD ¶
func (c *GRPCCarrier) MD() metadata.MD
func (*GRPCCarrier) Set ¶
func (c *GRPCCarrier) Set(key, value string)
func (*GRPCCarrier) Values ¶
func (c *GRPCCarrier) Values(key string) []string
type HeaderCarrier ¶
type HeaderCarrier struct {
// contains filtered or unexported fields
}
HeaderCarrier wraps http.Header to implement MetadataCarrier interface. Core logic: Delegate Get/Set/Add operations to underlying http.Header.
HeaderCarrier 包装 http.Header,实现 MetadataCarrier 接口。 核心逻辑:将 Get/Set/Add 操作委托给底层 http.Header。
func NewHeaderCarrier ¶
func NewHeaderCarrier(h http.Header) *HeaderCarrier
NewHeaderCarrier creates a new HeaderCarrier with http.Header. Core logic: Wrap http.Header in carrier.
NewHeaderCarrier 创建新的 HeaderCarrier,携带 http.Header。 核心逻辑:将 http.Header 包装为 carrier。
func (*HeaderCarrier) Add ¶
func (c *HeaderCarrier) Add(key, value string)
func (*HeaderCarrier) Get ¶
func (c *HeaderCarrier) Get(key string) string
func (*HeaderCarrier) Keys ¶
func (c *HeaderCarrier) Keys() []string
func (*HeaderCarrier) Set ¶
func (c *HeaderCarrier) Set(key, value string)
func (*HeaderCarrier) Values ¶
func (c *HeaderCarrier) Values(key string) []string
type MetadataInjector ¶
type MetadataInjector struct {
// contains filtered or unexported fields
}
MetadataInjector injects metadata into HTTP requests. Core logic: Use propagator to inject metadata into request headers.
MetadataInjector 将元数据注入 HTTP 请求。 核心逻辑:使用 propagator 将元数据注入到请求头。
func NewMetadataInjector ¶
func NewMetadataInjector(propagator transportcontract.MetadataPropagator) *MetadataInjector
NewMetadataInjector creates a new metadata injector with propagator. Core logic: Store propagator for later injection.
NewMetadataInjector 创建新的元数据注入器,携带 propagator。 核心逻辑:存储 propagator 用于后续注入。
func (*MetadataInjector) Inject ¶
func (i *MetadataInjector) Inject(req *http.Request)
Inject injects metadata into HTTP request headers. Core logic: Create carrier from headers, call propagator.Inject.
Inject 将元数据注入 HTTP 请求头。 核心逻辑:从 headers 创建 carrier、调用 propagator.Inject。