middleware

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: May 21, 2026 License: MIT Imports: 6 Imported by: 0

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

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

func GetGRPCMetadata(ctx context.Context) metadata.MD

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 GetHeaderValue

func GetHeaderValue(ctx context.Context, key string) string

func InjectToGinContext

func InjectToGinContext(ctx *gin.Context, md transportcontract.Metadata)

func MetadataMiddleware

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。

Jump to

Keyboard shortcuts

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