中文 | English
一组可运行的 Dubbo-go 示例,涵盖配置、注册中心、可观测性、互操作性、服务网格等场景。
请参考 HOWTO_CN.md 获取详细运行说明。
async:回调(异步)与单向 RPC 调用示例。apisix:Dubbo-go 集成 Apache APISIX 的示例。book-flight-ai-agent:使用 AI Agent 实现机票预订的示例。config_center:演示如何使用不同配置中心(如 Nacos、Zookeeper)进行配置管理。config_yaml:展示如何使用 YAML 文件配置 Dubbo-go 应用。context:演示如何通过 Go 的context在客户端与服务端之间传递用户数据(attachments)。error:Dubbo-go 的错误处理示例。filter:演示 Dubbo-go 中内置和自定义 Filter 的使用。polaris/limit:使用 Polaris 实现 TPS 限流。
healthcheck:服务健康检查示例。helloworld:Dubbo-go 最基础的 “Hello World” 示例,同时包含 Go 与 Java 的互操作示例。http3:HTTP/3(QUIC)协议支持示例,演示如何通过 Triple 协议使用 HTTP/3 实现 Go 与 Java 服务之间的高性能通信,并支持 TLS 加密。direct:不依赖注册中心的 Triple 点对点调用示例,并包含 Go 与 Java 的互操作示例。game:游戏服务示例。generic:泛化调用示例,支持 Dubbo-Go 与 Dubbo Java 服务互操作,适用于无接口信息场景。integrate_test:Dubbo-go 示例的集成测试用例。java_interop:展示 Java 与 Go Dubbo 实现之间的互操作能力。non-protobuf-dubbo:基于经典 Dubbo 协议与非 Protobuf 负载(Hessian2 风格)的 Java/Go 互操作示例。non-protobuf-triple:基于 Triple 协议与非 Protobuf 负载的 Java/Go 互操作示例。protobuf-triple:基于 Triple 协议与共享 Protobuf 契约的 Java/Go 互操作示例。service_discovery/interface:基于 Nacos 的接口级服务发现(Dubbo2 / Dubbo3 旧模型)Java/Go 互操作示例。service_discovery/service:基于 Nacos 的应用级服务发现(Dubbo3 模型)Java/Go 互操作示例。
llm:将大模型(LLM)集成到 Dubbo-go 中的示例。logger:Dubbo-go 应用的日志使用示例。metrics:可观测性相关示例。metrics/prometheus_grafana:展示如何采集并暴露 Dubbo-go 服务指标,支持 Prometheus Push 和 Pull 两种模式;同时包含用于清理 Push 模式僵尸指标的pgw-cleaner工具。metrics/probe:演示 Dubbo-go 在 Kubernetes 场景下的探针端点(/live、/ready、/startup)及部署方式。
mesh:基于代理的服务网格示例,展示如何在 Kubernetes 上结合 Envoy 部署 Dubbo-go 服务。online_boutique:基于 Dubbo-go 构建的微服务 “在线商城” 演示项目。otel/tracing:使用 OpenTelemetry 的分布式链路追踪示例。stdout:使用 stdout exporter 输出追踪数据。otlp_http_exporter:使用otlpHttpExporter导出追踪数据,覆盖dubbo/triple/jsonrpc协议。
registry:使用不同服务注册中心(如 Nacos、Zookeeper)的示例。retry:Dubbo-go RPC 调用重试机制示例。router: Dubbo-go 各种 Router 调用示例。router/tag: Dubbo-go 的 tag router 使用示例。router/condition: Dubbo-go 的 condition router 使用示例。router/script: Dubbo-go 的 script router 使用示例。
rpc:Dubbo-go 支持的多种 RPC 协议示例。rpc/dubbo:Dubbo 协议示例,包含 Java–Go 互操作。rpc/grpc:基于 gRPC 协议的示例。rpc/jsonrpc:基于 JSON-RPC 协议的示例。rpc/triple:Triple 协议示例,涵盖多种序列化方式。
streaming:流式 RPC 调用示例,并包含了Dubbo-go与Dubbo-java同时使用流式传输的互操作示例。task:任务调度与执行示例。timeout:Dubbo-go 超时处理示例。tls:演示如何在 Dubbo-go 中使用 TLS(基于 X.509 证书),实现客户端与服务端之间的加密通信和/或双向认证,同时包含 Go 与 Java 的互操作示例。transaction/seata-go:基于seata-go的分布式事务示例。
compatibility/generic:泛化调用示例。compatibility/polaris: Dubbo-go 与 polaris 集成示例.compatibility/polaris/router: 在 dubbogo 中快速体验北极星的服务路由能力
pgw-cleaner:用于在 Prometheus Push 模式下清理僵尸指标的运维工具。
当前仓库使用脚本驱动的集成测试流程:
start_integrate_test.sh:执行完整样例列表(与 CI 一致)。integrate_test.sh <sample-path>:执行单个样例。
./start_integrate_test.sh该脚本会:
- 启动根目录
docker-compose.yml依赖服务。 - 进行依赖健康检查。
- 按样例列表逐个调用
./integrate_test.sh ...。 - 在结束时(成功或失败)回收依赖容器。
./integrate_test.sh helloworld
./integrate_test.sh directintegrate_test.sh 的主要步骤:
- 启动
go-server(以及可能存在的辅助 Go server)。 - 运行
go-client。 - 运行
java-client(若存在且本机有mvn)。 - 停止
go-server。 - 启动
java-server(若存在),等待端口就绪。 - 再运行
java-client和go-client,验证 Go/Java 互通。
如果你希望添加更多示例,请按以下步骤进行:
- 新建一个子目录,并为你的示例取一个合适的名称。如果不确定如何组织代码,可以参考现有示例的目录结构和HOWTO.md。
- 在提交 PR 之前,请确保示例能正常运行;提交 PR 后,也请确保 GitHub CI 能通过。可以参考已有示例了解如何编写和执行测试。
- 在你的示例目录下提供一个
README.md,说明该示例的功能及运行方式。