# go-wind-plugins **Repository Path**: tx7do/go-wind-plugins ## Basic Information - **Project Name**: go-wind-plugins - **Description**: No description available - **Primary Language**: Go - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-10 - **Last Updated**: 2026-06-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Go Wind Plugins · 风行插件库

Go Wind 微服务框架的多引擎插件生态

一套接口,多种引擎,按需组装,即插即用

中文 · English · 日本語

Go Version go-wind License PRs Welcome

--- ## 项目简介 **go-wind-plugins** 是 [go-wind](https://github.com/tx7do/go-wind) 微服务框架的官方插件库,为配置中心、服务注册发现、日志系统和传输层提供统一的抽象接口与多引擎适配实现。 采用**乐高式组合设计**——每个插件只实现核心框架定义的标准接口,你可以根据实际技术栈自由选择底层引擎,切换引擎时无需改动业务代码。 --- ## 项目亮点 - **统一接口**:八大领域(Config / Registry / Log / Metrics / Transport / Broker / Encoding / Tracer)均由核心框架定义标准接口,插件只做实现 - **多引擎支持**:12 种配置中心、8 种注册中心、14 种日志后端、3 种指标后端、4 种 HTTP 驱动、20+ 种传输层协议、12 种消息代理、11 种编解码、3 种 AI SDK、1 种 OTLP 追踪协议,覆盖主流技术栈 - **零侵入**:业务代码只依赖接口,不依赖具体引擎 SDK - **独立版本**:每个子模块独立 `go.mod`,按需引入,避免依赖膨胀 - **Workspace 协同**:通过 `go.work` 管理多模块,开发体验如单仓项目 --- ## 核心接口 ### 配置中心(Config) | 接口 | 方法 | 说明 | |------|------|------| | `Reader` | `Load(ctx, key) ([]byte, error)` | 按 key 一次性加载配置 | | `Watcher` | `Watch(ctx, key) (<-chan struct{}, error)` | 信号模式,值变更时通知 | | `ValueWatcher` | `WatchValue(ctx, key) (<-chan []byte, error)` | 推值模式,直接推送新值 | | `Closer` | `Close() error` | 资源释放 | | `Decoder` | `Decode(data, out) error` | 原始字节反序列化 | ### 服务注册发现(Registry) | 接口 | 方法 | 说明 | |------|------|------| | `Registrar` | `Register(ctx, *Instance)` / `Deregister(ctx, *Instance)` | 服务注册与注销 | | `Discovery` | `GetService(ctx, name)` / `Watch(ctx, name)` | 服务发现与监听 | | `Watcher` | `Next(ctx) ([]*Instance, error)` / `Stop()` | 实例变更流 | ### 日志(Log) | 接口 | 方法 | 说明 | |------|------|------| | `Logger` | `Debug/Info/Warn/Error(ctx, msg, keyvals...)` | 四级日志输出 | | `Logger` | `With(keyvals...) Logger` | 附加上下文字段 | | `Logger` | `Enabled(Level) bool` | 级别判断 | ### 传输层(Transport) | 接口 | 方法 | 说明 | |------|------|------| | `Server` (HTTP) | `Handle / GET / POST / PUT / DELETE...` | 路由注册 | | `Server` (HTTP) | `Start(ctx)` / `Stop(ctx)` / `Endpoint()` | 生命周期管理 | | `Driver` (HTTP) | `Handle / Start / Stop` | 框架适配驱动 | ### 分布式追踪(Tracer) > 基于 OpenTelemetry 标准,不定义自定义接口,直接使用原生 OTel 类型。 | 类型 | 方法 | 说明 | |------|------|------| | `*sdktrace.TracerProvider` | `Tracer(name) trace.Tracer` | 创建标准 OTel Tracer | | `*sdktrace.TracerProvider` | `Shutdown(ctx)` | 关闭 provider,刷新未导出 span | | `trace.Tracer` | `Start(ctx, name, opts...)` | 创建 Span,注入 trace 上下文 | ### 消息代理(Broker) | 接口 | 方法 | 说明 | |------|------|------| | `Broker` | `Name() string` | 获取 Broker 名称 | | `Broker` | `Address() string` | 获取 Broker 地址 | | `Broker` | `Init(...Option) error` | 初始化 Broker | | `Broker` | `Connect() / Disconnect() error` | 连接 / 断开 Broker | | `Broker` | `Publish(ctx, topic, *Message, ...PublishOption) error` | 发布消息到主题 | | `Broker` | `Subscribe(topic, Handler, Binder, ...SubscribeOption) (Subscriber, error)` | 订阅主题 | | `Broker` | `Request(ctx, topic, *Message, ...RequestOption) (*Message, error)` | 请求-响应模式 | | `Message` | `Headers / Body / Key` | 消息头、消息体、分区键 | | `Event` | `Topic() / Message() / Ack() / Error()` | 订阅者收到的事件 | | `Subscriber` | `Unsubscribe() error` | 取消订阅 | ### 指标监控(Metrics) | 接口 | 方法 | 说明 | |------|------|------| | `Metrics` | `Counter(ctx, name, value, labels)` | 单调递增计数器(请求数、错误数) | | `Metrics` | `Histogram(ctx, name, value, labels)` | 直方图分布(延迟、负载大小) | | `Metrics` | `Gauge(ctx, name, value, labels)` | 当前瞬时值(队列深度、活跃连接数) | | `Closer` | `Close() error` | 关闭并刷新未发送数据 | ### 编解码(Encoding) | 接口/函数 | 方法 | 说明 | |------|------|------| | `Codec` | `Marshal(v) ([]byte, error)` | 序列化 | | `Codec` | `Unmarshal(data, v) error` | 反序列化 | | `Codec` | `Name() string` | 编解码器名称(json/proto/yaml) | | 包函数 | `RegisterCodec(c)` / `GetCodec(name)` | 全局注册表 | --- ## 插件矩阵 ### 配置中心(Config) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Apollo | `github.com/tx7do/go-wind-plugins/config/apollo` | 携程 Apollo | | Consul | `github.com/tx7do/go-wind-plugins/config/consul` | HashiCorp Consul KV | | Etcd | `github.com/tx7do/go-wind-plugins/config/etcd` | CoreOS etcd | | Env | `github.com/tx7do/go-wind-plugins/config/env` | 环境变量 | | File | `github.com/tx7do/go-wind-plugins/config/file` | 本地文件 | | FS | `github.com/tx7do/go-wind-plugins/config/fs` | fs.FS | | HTTP | `github.com/tx7do/go-wind-plugins/config/http` | HTTP 远程拉取 | | Kubernetes | `github.com/tx7do/go-wind-plugins/config/kubernetes` | K8s ConfigMap / Secret | | Nacos | `github.com/tx7do/go-wind-plugins/config/nacos` | 阿里云 Nacos | | OSS | `github.com/tx7do/go-wind-plugins/config/oss` | 对象存储 | | Polaris | `github.com/tx7do/go-wind-plugins/config/polaris` | 腾讯云 Polaris | | Redis | `github.com/tx7do/go-wind-plugins/config/redis` | Redis KV | | Vault | `github.com/tx7do/go-wind-plugins/config/vault` | HashiCorp Vault | | Zookeeper | `github.com/tx7do/go-wind-plugins/config/zookeeper` | Apache ZooKeeper | ### 服务注册发现(Registry) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Consul | `github.com/tx7do/go-wind-plugins/registry/consul` | HashiCorp Consul | | Etcd | `github.com/tx7do/go-wind-plugins/registry/etcd` | CoreOS etcd | | Eureka | `github.com/tx7do/go-wind-plugins/registry/eureka` | Netflix Eureka | | Kubernetes | `github.com/tx7do/go-wind-plugins/registry/kubernetes` | K8s Endpoints | | Nacos | `github.com/tx7do/go-wind-plugins/registry/nacos` | 阿里云 Nacos | | Polaris | `github.com/tx7do/go-wind-plugins/registry/polaris` | 腾讯云 Polaris | | ServiceComb | `github.com/tx7do/go-wind-plugins/registry/servicecomb` | Apache ServiceComb | | Zookeeper | `github.com/tx7do/go-wind-plugins/registry/zookeeper` | Apache ZooKeeper | ### 日志(Log) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Aliyun SLS | `github.com/tx7do/go-wind-plugins/log/aliyun` | 阿里云日志服务 SLS | | Charm | `github.com/tx7do/go-wind-plugins/log/charm` | charmbracelet/log | | CloudWatch | `github.com/tx7do/go-wind-plugins/log/cloudwatch` | AWS CloudWatch Logs | | Fluent | `github.com/tx7do/go-wind-plugins/log/fluent` | Fluentd | | Glog | `github.com/tx7do/go-wind-plugins/log/glog` | golang/glog | | Hclog | `github.com/tx7do/go-wind-plugins/log/hclog` | hashicorp/go-hclog | | Logrus | `github.com/tx7do/go-wind-plugins/log/logrus` | sirupsen/logrus | | Loki | `github.com/tx7do/go-wind-plugins/log/loki` | Grafana Loki | | Phuslu | `github.com/tx7do/go-wind-plugins/log/phuslu` | phuslu/log | | Sentry | `github.com/tx7do/go-wind-plugins/log/sentry` | getsentry/sentry-go | | Tencent CLS | `github.com/tx7do/go-wind-plugins/log/tencent` | 腾讯云日志服务 CLS | | Zap | `github.com/tx7do/go-wind-plugins/log/zap` | uber-go/zap | | Zerolog | `github.com/tx7do/go-wind-plugins/log/zerolog` | rs/zerolog | ### 传输层(Transport) | 插件 | 模块路径 | 引擎 | |------|---------|------| | HTTP (标准库) | `github.com/tx7do/go-wind-plugins/transport/http` | net/http | | HTTP (Chi) | `github.com/tx7do/go-wind-plugins/transport/http/chi` | go-chi/chi | | HTTP (Gin) | `github.com/tx7do/go-wind-plugins/transport/http/gin` | gin-gonic/gin | | HTTP (Fiber) | `github.com/tx7do/go-wind-plugins/transport/http/fiber` | gofiber/fiber | | HTTP/3 | `github.com/tx7do/go-wind-plugins/transport/http3` | quic-go/http3 | | gRPC | `github.com/tx7do/go-wind-plugins/transport/grpc` | google.golang.org/grpc | | WebSocket | `github.com/tx7do/go-wind-plugins/transport/websocket` | gorilla/websocket | | Socket.IO | `github.com/tx7do/go-wind-plugins/transport/socketio` | googollee/go-socket.io | | SignalR | `github.com/tx7do/go-wind-plugins/transport/signalr` | SignalR 协议 | | SSE | `github.com/tx7do/go-wind-plugins/transport/sse` | Server-Sent Events | | TCP | `github.com/tx7do/go-wind-plugins/transport/tcp` | net.Listener | | KCP | `github.com/tx7do/go-wind-plugins/transport/kcp` | xtaci/kcp-go | | WebRTC | `github.com/tx7do/go-wind-plugins/transport/webrtc` | pion/webrtc v4 | | WebTransport | `github.com/tx7do/go-wind-plugins/transport/webtransport` | webtransport-go | | GraphQL | `github.com/tx7do/go-wind-plugins/transport/graphql` | graphql-go | | Thrift | `github.com/tx7do/go-wind-plugins/transport/thrift` | Apache Thrift | | tRPC | `github.com/tx7do/go-wind-plugins/transport/trpc` | tRPC 协议 | | Cron | `github.com/tx7do/go-wind-plugins/transport/cron` | robfig/cron | | HPTimer | `github.com/tx7do/go-wind-plugins/transport/hptimer` | 高精度定时器 | | Asynq | `github.com/tx7do/go-wind-plugins/transport/asynq` | hibiken/asynq | | Machinery | `github.com/tx7do/go-wind-plugins/transport/machinery` | machinery (类 Celery) | | MCP | `github.com/tx7do/go-wind-plugins/transport/mcp` | Model Context Protocol | ### 分布式追踪(Tracer) | 插件 | 模块路径 | 引擎 | |------|---------|------| | OTLP | `github.com/tx7do/go-wind-plugins/tracer/otlp` | OpenTelemetry Protocol (OTLP) | **说明**:OTLP 是 OpenTelemetry 的标准协议,支持对接所有主流后端:Jaeger、Zipkin、SkyWalking、Tempo (Grafana)、Datadog、阿里云 ARMS、腾讯云 APM 等。只需配置 endpoint 即可切换后端,无需更换插件。 ### 指标监控(Metrics) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Prometheus | `github.com/tx7do/go-wind-plugins/metrics/prometheus` | Prometheus client_golang | | OpenTelemetry | `github.com/tx7do/go-wind-plugins/metrics/otel` | OTLP (gRPC/HTTP) | | Datadog | `github.com/tx7do/go-wind-plugins/metrics/datadog` | DogStatsD | ### 编解码(Encoding) | 插件 | 模块路径 | 引擎 | |------|---------|------| | JSON | `github.com/tx7do/go-wind-plugins/encoding/json` | encoding/json | | Protobuf | `github.com/tx7do/go-wind-plugins/encoding/proto` | google.golang.org/protobuf | | YAML | `github.com/tx7do/go-wind-plugins/encoding/yaml` | gopkg.in/yaml.v3 | | TOML | `github.com/tx7do/go-wind-plugins/encoding/toml` | pelletier/go-toml | | XML | `github.com/tx7do/go-wind-plugins/encoding/xml` | encoding/xml | | MsgPack | `github.com/tx7do/go-wind-plugins/encoding/msgpack` | vmihailenco/msgpack | | Avro | `github.com/tx7do/go-wind-plugins/encoding/avro` | linkedin/goavro | | BSON | `github.com/tx7do/go-wind-plugins/encoding/bson` | go.mongodb.org/mongo-driver | | CBOR | `github.com/tx7do/go-wind-plugins/encoding/cbor` | fxamacker/cbor | | FlatBuffers | `github.com/tx7do/go-wind-plugins/encoding/flatbuffers` | google/flatbuffers | | Gob | `github.com/tx7do/go-wind-plugins/encoding/gob` | encoding/gob | | Thrift | `github.com/tx7do/go-wind-plugins/encoding/thrift` | Apache Thrift | ### 工作流引擎 > 四个引擎的工作流操作参数/返回值类型互不兼容,仅提取最小公共接口 `workflow.Client`(`Close() error`)。 | 插件 | 模块路径 | 框架 | |------|---------|------| | Argo Workflows | `github.com/tx7do/go-wind-plugins/workflow/argo` | Argo Workflows REST API | | Conductor | `github.com/tx7do/go-wind-plugins/workflow/conductor` | conductor-sdk/conductor-go | | GoWorkflows | `github.com/tx7do/go-wind-plugins/workflow/goworkflows` | cschleiden/go-workflows | | Temporal | `github.com/tx7do/go-wind-plugins/workflow/temporal` | temporal.io/sdk | ### 对象存储 > 两个 OSS 实现的底层 SDK 和返回类型不兼容,各自定义本地 `Config`,不提取共享接口。 | 插件 | 模块路径 | 框架 | |------|---------|------| | MinIO | `github.com/tx7do/go-wind-plugins/oss/minio` | minio/minio-go | | S3 | `github.com/tx7do/go-wind-plugins/oss/s3` | aws/aws-sdk-go-v2 | ### AI(大模型集成) > 每个 AI 子模块独立定义配置和客户端,支持不同的大语言模型服务。 | 插件 | 模块路径 | 框架 | |------|---------|------| | OpenAI | `github.com/tx7do/go-wind-plugins/ai/openai` | sashabaranov/go-openai | | LangChainGo | `github.com/tx7do/go-wind-plugins/ai/langchaingo` | tmc/langchaingo | | Eino | `github.com/tx7do/go-wind-plugins/ai/eino` | cloudwego/eino | ### 缓存(Cache) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Local | `github.com/tx7do/go-wind-plugins/cache/local` | 本地内存缓存 | | Redis | `github.com/tx7do/go-wind-plugins/cache/redis` | gomodule/redigo | ### 熔断器(Circuit Breaker) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Hystrix | `github.com/tx7do/go-wind-plugins/circuitbreaker/hystrix` | afex/hystrix-go | | Sentinel | `github.com/tx7do/go-wind-plugins/circuitbreaker/sentinel` | alibaba/sentinel-golang | | SRE | `github.com/tx7do/go-wind-plugins/circuitbreaker/sres` | SRE 自适应熔断 | | Vegas | `github.com/tx7do/go-wind-plugins/circuitbreaker/vegas` | Vegas 自适应限流 | ### 限流器(Rate Limiter) | 插件 | 模块路径 | 引擎 | |------|---------|------| | Token Bucket | `github.com/tx7do/go-wind-plugins/ratelimit/tokenbucket` | 令牌桶算法 | | BBR | `github.com/tx7do/go-wind-plugins/ratelimit/bbr` | BBR 自适应限流 | | Sentinel | `github.com/tx7do/go-wind-plugins/ratelimit/sentinel` | alibaba/sentinel-golang | ### 安全(Security) | 插件 | 模块路径 | 引擎 | |------|---------|------| | JWT | `github.com/tx7do/go-wind-plugins/security/authn` | golang-jwt/jwt | | Casbin | `github.com/tx7do/go-wind-plugins/security/authz` | casbin/casbin | | Crypto | `github.com/tx7do/go-wind-plugins/security/crypto` | go-utils/crypto | ### 其他工具模块 | 模块 | 路径 | 说明 | |------|------|------| | Errors | `github.com/tx7do/go-wind-plugins/errors` | 统一错误码与错误类型 | | Health | `github.com/tx7do/go-wind-plugins/health` | HTTP 健康检查 | | Pprof | `github.com/tx7do/go-wind-plugins/pprof` | 性能分析端点 | | Retry | `github.com/tx7do/go-wind-plugins/retry` | 重试策略(指数退避) | ### 消息代理(Broker) > 各 Broker 引擎 SDK 差异较大,每个子模块独立定义配置选项,但均实现核心 `broker.Broker` 接口。 | 插件 | 模块路径 | 引擎 | |------|---------|------| | Kafka | `github.com/tx7do/go-wind-plugins/broker/kafka` | segmentio/kafka-go | | RabbitMQ | `github.com/tx7do/go-wind-plugins/broker/rabbitmq` | rabbitmq/amqp091-go | | NATS | `github.com/tx7do/go-wind-plugins/broker/nats` | nats-io/nats.go | | MQTT | `github.com/tx7do/go-wind-plugins/broker/mqtt` | eclipse/paho.mqtt.golang | | Pulsar | `github.com/tx7do/go-wind-plugins/broker/pulsar` | apache/pulsar-client-go | | Redis | `github.com/tx7do/go-wind-plugins/broker/redis` | gomodule/redigo | | RocketMQ | `github.com/tx7do/go-wind-plugins/broker/rocketmq` | apache/rocketmq-client-go + rocketmq-clients | | NSQ | `github.com/tx7do/go-wind-plugins/broker/nsq` | nsqio/go-nsq | | SQS | `github.com/tx7do/go-wind-plugins/broker/sqs` | aws/aws-sdk-go-v2 | | GCP PubSub | `github.com/tx7do/go-wind-plugins/broker/gcpubsub` | cloud.google.com/go/pubsub | | Azure Service Bus | `github.com/tx7do/go-wind-plugins/broker/azuresb` | azure-sdk-for-go | | STOMP | `github.com/tx7do/go-wind-plugins/broker/stomp` | go-stomp/stomp | --- ## 架构设计 ```mermaid graph TB App["应用层
业务代码只依赖接口"] Core["go-wind 核心框架
定义标准接口 + wind.Instance"] subgraph Config["配置中心"] CApollo[Apollo] CConsul[Consul] CEtcd[etcd] CEnv[Env] CFile[File] CFS[FS] CHTTP[HTTP] CK8s[Kubernetes] CNacos[Nacos] COSS[OSS] CPolaris[Polaris] CRedis[Redis] CVault[Vault] CZK[ZooKeeper] end subgraph Registry["服务注册发现"] RConsul[Consul] REtcd[etcd] REureka[Eureka] RK8s[Kubernetes] RNacos[Nacos] RPolaris[Polaris] RServiceComb[ServiceComb] RZK[ZooKeeper] end subgraph Log["日志系统"] LAliyun[Aliyun SLS] LCharm[Charm] LCloudWatch[CloudWatch] LFluent[Fluent] LGlog[Glog] LHclog[Hclog] LLogrus[Logrus] LLoki[Loki] LPhuslu[Phuslu] LSentry[Sentry] LTencent[Tencent CLS] LZap[Zap] LZerolog[Zerolog] end subgraph Transport["传输层"] THTTP[HTTP] TChi[Chi] TGin[Gin] TFiber[Fiber] THTTP3[HTTP/3] TGRPC[gRPC] TWS[WebSocket] TSIO[Socket.IO] TSignalR[SignalR] TSSE[SSE] TTCP[TCP] TKCP[KCP] TWebRTC[WebRTC] TWT[WebTransport] TGraphQL[GraphQL] TThrift[Thrift] TTRPC[tRPC] TCron[Cron] THPTimer[HPTimer] TAsynq[Asynq] TMachinery[Machinery] TMCP[MCP] end subgraph Tracer["分布式追踪"] TOTLP[OTLP] end subgraph Metrics["指标监控"] MProm[Prometheus] MOtel[OTLP] MDatadog[Datadog] end subgraph Workflow["工作流引擎"] WArgo[Argo] WConductor[Conductor] WGoWorkflows[GoWorkflows] WTemporal[Temporal] end subgraph OSS["对象存储"] OMinio[MinIO] OS3[S3] end subgraph Broker["消息代理"] BKafka[Kafka] BRabbitMQ[RabbitMQ] BNATS[NATS] BMQTT[MQTT] BPulsar[Pulsar] BRedis[Redis] BRocketMQ[RocketMQ] BNSQ[NSQ] BSQS[SQS] BGCP[GCP PubSub] BAzure[Azure SB] BActiveMQ[ActiveMQ] BSTOMP[STOMP] end subgraph Encoding["编解码"] EJSON[JSON] EProto[Protobuf] EYAML[YAML] ETOML[TOML] EXML[XML] EMsgPack[MsgPack] EAvro[Avro] EBSON[BSON] EFlat[FlatBuffers] end subgraph AI["AI 大模型"] AOpenAI[OpenAI] ALangChain[LangChainGo] AEino[Eino] end subgraph Cache["缓存"] CacheLocal[Local] CacheRedis[Redis] end subgraph Security["安全"] SAuthN[JWT] SAuthZ[Casbin] SCrypto[Crypto] end subgraph Resilience["弹性能力"] RCBHystrix[Hystrix] RCBSentinel[Sentinel] RCBRatelimit[Token Bucket] RCBBBR[BBR] end App --> Core Core --> Config Core --> Registry Core --> Log Core --> Transport Core --> Tracer Core --> Metrics Core --> Workflow Core --> OSS Core --> Broker Core --> Encoding Core --> AI Core --> Cache Core --> Security Core --> Resilience ``` --- ## 项目结构 ``` go-wind-plugins/ ├── ai/ # AI 大模型集成 │ ├── openai/ # OpenAI SDK │ ├── langchaingo/ # LangChainGo │ └── eino/ # CloudWeGo Eino │ ├── broker/ # 消息代理接口与插件 │ ├── broker.go # Broker 接口定义 │ ├── kafka/ # Apache Kafka │ ├── rabbitmq/ # RabbitMQ │ ├── nats/ # NATS JetStream │ ├── mqtt/ # MQTT │ ├── pulsar/ # Apache Pulsar │ ├── redis/ # Redis Pub/Sub │ ├── rocketmq/ # Apache RocketMQ │ ├── nsq/ # NSQ │ ├── sqs/ # AWS SQS │ ├── gcpubsub/ # Google Cloud Pub/Sub │ ├── azuresb/ # Azure Service Bus │ └── stomp/ # STOMP 协议 │ ├── cache/ # 缓存接口与插件 │ ├── cache.go # Cache 接口定义 │ ├── local/ # 本地内存缓存 │ └── redis/ # Redis 缓存 │ ├── circuitbreaker/ # 熔断器接口与插件 │ ├── circuitbreaker.go # CircuitBreaker 接口定义 │ ├── hystrix/ # Hystrix │ ├── sentinel/ # Sentinel │ ├── sres/ # SRE 自适应熔断 │ └── vegas/ # Vegas 自适应限流 │ ├── config/ # 配置中心接口与插件 │ ├── config.go # 标准接口定义 │ ├── apollo/ # 携程 Apollo │ ├── consul/ # HashiCorp Consul KV │ ├── etcd/ # CoreOS etcd │ ├── env/ # 环境变量 │ ├── file/ # 本地文件 │ ├── fs/ # fs.FS │ ├── http/ # HTTP 远程拉取 │ ├── kubernetes/ # Kubernetes ConfigMap/Secret │ ├── nacos/ # 阿里云 Nacos │ ├── oss/ # 对象存储 │ ├── polaris/ # 腾讯云 Polaris │ ├── redis/ # Redis KV │ ├── vault/ # HashiCorp Vault │ └── zookeeper/ # Apache ZooKeeper │ ├── encoding/ # 编解码接口与插件 │ ├── encoding.go # Codec 接口定义 + 注册表 │ ├── json/ # JSON │ ├── proto/ # Protobuf │ ├── yaml/ # YAML │ ├── toml/ # TOML │ ├── xml/ # XML │ ├── msgpack/ # MessagePack │ ├── avro/ # Avro │ ├── bson/ # BSON │ ├── cbor/ # CBOR │ ├── flatbuffers/ # FlatBuffers │ ├── gob/ # Gob │ └── thrift/ # Apache Thrift │ ├── errors/ # 统一错误码与错误类型 │ ├── health/ # HTTP 健康检查 │ ├── log/ # 日志接口与适配器 │ ├── slog_logger.go # slog 适配器(默认) │ ├── aliyun/ # 阿里云 SLS │ ├── charm/ # Charm │ ├── cloudwatch/ # AWS CloudWatch │ ├── fluent/ # Fluentd │ ├── glog/ # glog │ ├── hclog/ # hclog │ ├── logrus/ # logrus │ ├── loki/ # Grafana Loki │ ├── phuslu/ # phuslu/log │ ├── sentry/ # Sentry │ ├── tencent/ # 腾讯云 CLS │ ├── zap/ # zap │ └── zerolog/ # zerolog │ ├── metrics/ # 指标监控接口与插件 │ ├── prometheus/ # Prometheus │ ├── otel/ # OpenTelemetry │ └── datadog/ # Datadog │ ├── oss/ # 对象存储 │ ├── minio/ # MinIO │ └── s3/ # AWS S3 │ ├── pprof/ # 性能分析端点 │ ├── ratelimit/ # 限流器接口与插件 │ ├── tokenbucket/ # 令牌桶 │ ├── bbr/ # BBR │ └── sentinel/ # Sentinel │ ├── registry/ # 服务注册发现接口与插件 │ ├── consul/ # Consul │ ├── etcd/ # etcd │ ├── eureka/ # Eureka │ ├── kubernetes/ # Kubernetes │ ├── nacos/ # Nacos │ ├── polaris/ # Polaris │ ├── servicecomb/ # ServiceComb │ └── zookeeper/ # ZooKeeper │ ├── retry/ # 重试策略 │ ├── security/ # 安全模块 │ ├── authn/ # 认证(JWT/OAuth2/OIDC) │ ├── authz/ # 授权(Casbin) │ └── crypto/ # 加解密 │ ├── tracer/ # 分布式追踪 │ └── otlp/ # OpenTelemetry OTLP │ ├── transport/ # 传输层接口与驱动 │ ├── http/ # HTTP Server + Driver 接口 │ │ ├── chi/ # Chi 驱动 │ │ ├── gin/ # Gin 驱动 │ │ └── fiber/ # Fiber 驱动 │ ├── http3/ # HTTP/3 (QUIC) │ ├── grpc/ # gRPC │ ├── websocket/ # WebSocket │ ├── socketio/ # Socket.IO │ ├── signalr/ # SignalR │ ├── sse/ # Server-Sent Events │ ├── tcp/ # TCP Socket │ ├── kcp/ # KCP (UDP) │ ├── webrtc/ # WebRTC SFU │ ├── webtransport/ # WebTransport │ ├── graphql/ # GraphQL │ ├── thrift/ # Apache Thrift │ ├── trpc/ # tRPC │ ├── cron/ # Cron 定时任务 │ ├── hptimer/ # 高精度定时器 │ ├── asynq/ # Asynq 异步任务队列 │ ├── machinery/ # Machinery (类 Celery) │ └── mcp/ # Model Context Protocol │ ├── workflow/ # 工作流引擎 │ ├── argo/ # Argo Workflows │ ├── conductor/ # Conductor │ ├── goworkflows/ # GoWorkflows │ └── temporal/ # Temporal │ ├── go.work # Go Workspace 多模块管理 ├── LICENSE └── README.md ``` --- ## 快速开始 ### 安装 ```bash # 按需引入,例如使用 etcd 作为配置中心 + nacos 作为注册中心 go get github.com/tx7do/go-wind-plugins/config/etcd go get github.com/tx7do/go-wind-plugins/registry/nacos go get github.com/tx7do/go-wind-plugins/log/zap ``` ### 配置中心示例(etcd) ```go package main import ( "context" "fmt" clientv3 "go.etcd.io/etcd/client/v3" "github.com/tx7do/go-wind-plugins/config/etcd" ) func main() { client, err := clientv3.New(clientv3.Config{ Endpoints: []string{"localhost:2379"}, }) if err != nil { panic(err) } cfg, err := etcd.New(client) if err != nil { panic(err) } // 加载配置 data, err := cfg.Load(context.Background(), "/myapp/config") if err != nil { panic(err) } fmt.Println("config:", string(data)) // 监听配置变更 ch, _ := cfg.WatchValue(context.Background(), "/myapp/config") for val := range ch { fmt.Println("config updated:", string(val)) } } ``` ### 服务注册发现示例(nacos) ```go package main import ( "context" "fmt" "github.com/nacos-group/nacos-sdk-go/v2/clients" "github.com/nacos-group/nacos-sdk-go/v2/common/constant" "github.com/nacos-group/nacos-sdk-go/v2/vo" wind "github.com/tx7do/go-wind" "github.com/tx7do/go-wind-plugins/registry/nacos" ) func main() { client, _ := clients.NewNamingClient(vo.NacosClientParam{ ServerConfigs: []constant.ServerConfig{ {IpAddr: "127.0.0.1", Port: 8848}, }, ClientConfig: &constant.ClientConfig{ NamespaceId: "public", }, }) r := nacos.New(client) // 注册服务 instance := &wind.Instance{ Name: "my-service", Version: "v1.0.0", Endpoints: []string{"grpc://127.0.0.1:8080"}, } _ = r.Register(context.Background(), instance) // 服务发现 services, _ := r.GetService(context.Background(), "my-service.grpc") for _, svc := range services { fmt.Printf("found: %+v\n", svc) } } ``` ### HTTP 服务器示例(Gin 驱动) ```go package main import ( "context" "net/http" httpPlugin "github.com/tx7do/go-wind-plugins/transport/http" "github.com/tx7do/go-wind-plugins/transport/http/gin" ) func main() { srv := httpPlugin.NewServer(":8080", httpPlugin.WithDriver(gin.NewDriver()), httpPlugin.WithMiddleware(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-Engine", "gin") next.ServeHTTP(w, r) }) }), ) srv.GET("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello from Gin driver!")) }) srv.Start(context.Background()) } ``` ### 日志示例(Zap) ```go package main import ( "context" "github.com/tx7do/go-wind-plugins/log/zap" ) func main() { logger, _ := zap.NewZapLogger() logger.Info(context.Background(), "service started", "port", 8080) logger.With("module", "auth").Error(context.Background(), "token expired") } ``` ### 分布式追踪示例(OTLP) ```go package main import ( "context" "fmt" "time" "github.com/tx7do/go-wind-plugins/tracer/otlp" ) func main() { // 创建 OTLP TracerProvider(自动注册为全局 TracerProvider) tp, err := otlp.New( otlp.WithEndpoint("localhost:4317"), // OTLP collector endpoint otlp.WithServiceName("my-service"), // 服务名称 otlp.WithServiceVersion("v1.0.0"), // 服务版本 otlp.WithSampleRatio(1.0), // 全量采样 otlp.WithInsecure(true), // 禁用 TLS ) if err != nil { panic(err) } defer tp.Shutdown(context.Background()) // 使用标准 OpenTelemetry API 创建 tracer tracer := tp.Tracer("my-service") // 创建 span ctx, span := tracer.Start(context.Background(), "handle-request") defer span.End() // 模拟业务逻辑 time.Sleep(100 * time.Millisecond) fmt.Println("Request processed") // 嵌套 span _, childSpan := tracer.Start(ctx, "database-query") defer childSpan.End() time.Sleep(50 * time.Millisecond) fmt.Println("Query completed") } ``` **运行前提**:需要先启动 OTLP collector,例如使用 Jaeger: ```bash docker run -d --name jaeger \ -e COLLECTOR_OTLP_ENABLED=true \ -p 4317:4317 \ -p 16686:16686 \ jaegertracing/jaeger:latest ``` 然后访问 http://localhost:16686 查看 trace。 ### 指标监控示例(Prometheus) ```go package main import ( "context" "log" "net/http" "github.com/prometheus/client_golang/promhttp" "github.com/tx7do/go-wind-plugins/metrics/prometheus" ) func main() { // 创建 Prometheus 指标 provider m, err := prometheus.NewWithDefaultRegistry( prometheus.WithNamespace("myapp"), ) if err != nil { log.Fatal(err) } // 记录指标 ctx := context.Background() m.Counter(ctx, "requests_total", 1, map[string]string{"method": "GET"}) m.Histogram(ctx, "request_duration_seconds", 0.042, map[string]string{"method": "GET"}) m.Gauge(ctx, "queue_depth", 42, map[string]string{"queue": "email"}) // 暴露 /metrics 端点供 Prometheus 抓取 http.Handle("/metrics", promhttp.Handler()) log.Println("metrics on :9090/metrics") log.Fatal(http.ListenAndServe(":9090", nil)) } ``` ### 消息代理示例(Kafka) ```go package main import ( "context" "fmt" "log/slog" "github.com/tx7do/go-wind-plugins/broker" kafkaBroker "github.com/tx7do/go-wind-plugins/broker/kafka" ) func main() { // 创建 Kafka Broker b := kafkaBroker.NewBroker( broker.WithAddress("localhost:9092"), broker.WithCodec("json"), ) if err := b.Init(); err != nil { panic(err) } if err := b.Connect(); err != nil { panic(err) } defer b.Disconnect() // 发布消息 ctx := context.Background() msg := map[string]any{"temperature": 25.5, "humidity": 60.0} err := b.Publish(ctx, "sensor.temperature", broker.NewMessage(msg, broker.WithPublishHeaders(map[string]string{"version": "1.0"}), ), ) if err != nil { slog.Error("publish failed", "error", err) } fmt.Println("message published") // 订阅消息 _, err = b.Subscribe("sensor.temperature", func(ctx context.Context, event broker.Event) error { slog.Info("received", "topic", event.Topic(), "body", fmt.Sprintf("%v", event.Message().Body), ) return nil }, func() any { return &map[string]any{} }, ) if err != nil { panic(err) } select {} // 阻塞等待消息 } ``` --- ## 设计理念 ### 乐高式组合 go-wind-plugins 遵循 **接口优先、实现可选** 的设计原则: 1. **核心框架定义接口**:`go-wind` 定义 `Reader`、`Registrar`、`Logger`、`Server` 等标准接口 2. **插件实现接口**:每个插件模块只实现对应的标准接口,如 etcd 配置中心实现 `config.Reader` + `config.ValueWatcher` 3. **应用层注入**:业务代码通过接口引用插件,编译时选择具体实现,切换引擎只需改一行 import ### 独立版本管理 每个子模块拥有独立的 `go.mod`,可以单独发布版本: ``` github.com/tx7do/go-wind-plugins/config # 接口定义包 github.com/tx7do/go-wind-plugins/config/etcd # etcd 实现 github.com/tx7do/go-wind-plugins/registry # 接口定义包 github.com/tx7do/go-wind-plugins/registry/nacos # nacos 实现 ``` --- ## 参与贡献 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支:`git checkout -b feature/new-plugin` 3. 提交变更:`git commit -m 'feat: add new plugin'` 4. 推送分支:`git push origin feature/new-plugin` 5. 提交 Pull Request --- ## 开源许可 [MIT License](LICENSE) © 2026 GoWind