尝试着去熟悉 dubbo-go
的源码,同步进行熟悉的有 Docker 使用
源码的阅读顺序思路
先运行
- 运行基础的
hello world
源码 - 查看配置文件
- 开启各种依赖服务(如: zk, consul)
- 开启
server
服务端 - 通过
client
调用服务端 - 打印完整请求日志和回包
运行成功后
- 了解框架的设计模型
- 从配置文件解析开始, 自顶向下的阅读框架的调用栈
- 从
server
端的配置文件解析阅读到server
端的监听启动 - 从
client
端的配置文件解析阅读到一次invoker Call
调用
安装 zookeeper
brew info zookeeper
brew install zookeeper
目录组织
├── app # 源码
├── assembly # 可选的针对特定系统环境的 build 脚本
│ ├── bin
│ ├── common
│ ├── linux
│ ├── mac
│ └── windows
└── profiles # 配置文件
├── dev
├── release
└── test
分别切换到server
和client
下的app
目录下,需要配置环境变量CONF_PROVIDER_FILE_PATH
和 APP_LOG_CONF_FILE
, 当然也可以编写环境变量的配置脚本builddev.sh
export CONF_PROVIDER_FILE_PATH="../profiles/dev/server.yml"
export APP_LOG_CONF_FILE="../profiles/dev/log.yml"
export GOPROXY="http://goproxy.io"
go run .
先运行server
, 后运行client
之后
server
端会打印出:
[2020-11-23/23:52:33 main.(*UserProvider).GetUser: user.go: 51] req:[]interface {}{"A001"}
client
端会收到如下响应:
[2020-11-23/23:42:59 main.main: client.go: 64] response result: &{A001 Alex Stocks 18 2020-11-23 23:42:59.442 +0800 CST}
这样表示成功运行.
server
端的user.go
包含以下的部分
-
init
函数服务端代码中最先被执行的部分
-
用户自定义的传输结构体
用户数据的传输,示例中是
User
-
rpc_service
函数供
client
端调用的自定义rpc
函数GetUser
下面是dubbo
的官方设计图