Dubbo Golang开发微服务

开发微服务

本示例演示了使用 dubbo-go 开发微服务应用,为应用增加包括服务发现、负载均衡、流量管控等微服务核心能力。

前置条件

本示例我们继续使用 Protobuf 开发微服务应用,请参考 开发 rpc server 和 rpc client 了解如何安装 protoc、protoc-gen-go-triple 等必须插件。

快速运行示例

下载示例源码

我们在 apache/dubbo-go-samples 仓库维护了一系列 dubbo-go 使用示例,用来帮助用户快速学习 dubbo-go 使用方式。

你可以 下载示例zip包并解压,或者克隆仓库:

复制代码
$ git clone --depth 1 https://github.com/apache/dubbo-go-samples

切换到快速开始示例目录:

复制代码
$ cd dubbo-go-samples/registry/nacos

启动 Nacos

由于示例应用中启用了服务发现能力且使用 Nacos 作为注册中心,在运行示例之前需要先启动注册中心。请参考 Nacos 本地安装 了解如何快速安装和启动 Nacos。

运行 server

go-server/cmd 示例目录:

运行以下命令,启动 server:

复制代码
$ go run server.go

使用 cURL 验证 server 正常启动:

复制代码
$ curl \
    --header "Content-Type: application/json" \
    --data '{"name": "Dubbo"}' \
    http://localhost:50051/greet.v1.GreetService/Greet

Greeting: Hello world

运行 client

打开一个新的 terminal,运行以下命令,启动 client

复制代码
$ go run client.go

Greeting: Hello world

以上就是一个完整的 dubbo-go 微服务应用工作流程。

源码讲解

关于 dubbo-go-samples/registry/nacos 示例源码,包括服务定义、代码生成、server/client 启动等均与上一篇 rpc server & rpc client 类似,请点击以上链接查看具体解读。

开发微服务最大的不同点在于:应用中增加了关于注册中心的配置,如下所示(以 server.go 为例):

复制代码
func main() {
	ins, err := dubbo.NewInstance(
		dubbo.WithName("dubbo_registry_nacos_server"),
		dubbo.WithRegistry(
			registry.WithNacos(),
			registry.WithAddress("127.0.0.1:8848"),
		),
		dubbo.WithProtocol(
			protocol.WithTriple(),
			protocol.WithPort(20000),
		),
	)

	srv, _ := ins.NewServer()

	greet.RegisterGreetServiceHandler(srv, &GreetTripleServer{})

	if err := srv.Serve(); err != nil {
		logger.Error(err)
	}
}

相比于开发 rpc 服务时我们直接声明 server.NewServer(...),这里我们使用 dubbo.newInstance(...) 初始化了一些全局共享的微服务核心组件,包括应用名、注册中心、协议等:

复制代码
ins, err := dubbo.NewInstance(
	dubbo.WithName("dubbo_registry_nacos_server"),
	dubbo.WithRegistry(
		registry.WithNacos(),
		registry.WithAddress("127.0.0.1:8848"),
	),
	dubbo.WithProtocol(
		protocol.WithTriple(),
		protocol.WithPort(20000),
	),
)

然后,才是创建 ins.NewServer() 并为 server 实例注册服务 greet.RegisterGreetServiceHandler(srv, &GreetTripleServer{}),最后通过 srv.Serve() 启动进程。

关于 dubbo.Insance 说明

  • 在开发 dubbo 微服务应用时,我们推荐使用 dubbo.Instance 来设置一些全局性的服务治理能力,如注册中心、协议、应用名、tracing、配置中心等。
  • ins.NewServer() 可以创建多个,通常当你需要在多个端口 发布多个协议 时才需要这么做。
相关推荐
小二·11 分钟前
从零到上线:Spring Boot 3 + Spring Cloud Alibaba + Vue 3 构建高可用 RBAC 微服务系统(超详细实战)
vue.js·spring boot·微服务
cherry523015 分钟前
Java大厂面试真题:Spring Boot + 微服务 + 缓存架构三轮技术拷问实录
jvm·spring boot·mysql·微服务·java面试·分布式架构·redis缓存
三口吃掉你1 小时前
微服务之网关(Spring Cloud Gateway)
java·网关·微服务·gateway
周杰伦_Jay2 小时前
【主流开发语言深度对比】Python/Go/Java/JS/Rust/C++评测
开发语言·python·golang
ldmd2842 小时前
Go语言实战:入门篇-5:函数、服务接口和Swagger UI
开发语言·后端·golang
三口吃掉你2 小时前
微服务之OpenFeign、hystrix熔断降级、loadbalancer负载均衡
hystrix·微服务·负载均衡·openfeign
NPE~3 小时前
[手写系列]Go手写db — — 第七版(实现Disk存储引擎、Docker化支持)
数据库·后端·docker·golang·教程·手写数据库
QX_hao10 小时前
【Go】--反射(reflect)的使用
开发语言·后端·golang
小坏讲微服务10 小时前
Docker-compose 搭建Maven私服部署
java·spring boot·后端·docker·微服务·容器·maven
hweiyu0013 小时前
Go、DevOps运维开发实战(视频教程)
开发语言·golang·运维开发