Skip to content

wljie2008/dubbo-go-think

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

Dubbo Go Think

尝试着去熟悉 dubbo-go 的源码,同步进行熟悉的有 Docker 使用

参考

dubbo-go dubbo-go-samples

Dubbo-go 源码笔记

解读

源码的阅读顺序思路

先运行

  • 运行基础的 hello world 源码
  • 查看配置文件
  • 开启各种依赖服务(如: zk, consul)
  • 开启 server 服务端
  • 通过 client 调用服务端
  • 打印完整请求日志和回包

运行成功后

  • 了解框架的设计模型
  • 从配置文件解析开始, 自顶向下的阅读框架的调用栈
  • server 端的配置文件解析阅读到 server端的监听启动
  • client端的配置文件解析阅读到一次 invoker Call 调用

环境

安装 zookeeper

brew info zookeeper
brew install zookeeper

Hello world

目录组织

├── app # 源码
├── assembly # 可选的针对特定系统环境的 build 脚本
│   ├── bin
│   ├── common
│   ├── linux
│   ├── mac
│   └── windows
└── profiles # 配置文件	
    ├── dev
    ├── release
    └── test

分别切换到serverclient下的app目录下,需要配置环境变量CONF_PROVIDER_FILE_PATHAPP_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的官方设计图

About

尝试去了解 dubbo-go 的源码

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published