server端开始服务

当拿到一款框架之后,一种不错的源码阅读方式大致如下:从运行最基础的 helloworld demo 源码开始 —> 再查看配置文件 —> 开启各种依赖服务(比如zk、consul) —> 开启服务端 —> 再到通过 client 调用服务端 —> 打印完整请求日志和回包。调用成功之后,再根据框架的设计模型,从配置文件解析开始,自顶向下递阅读整个框架的调用栈。

对于 C/S 模式的 rpc 请求来说,整个调用栈被拆成了 client 和 server 两部分,所以可以分别从 server 端的配置文件解析阅读到 server 端的监听启动,从 client 端的配置文件解析阅读到一次 invoker Call 调用。这样一次完整请求就明晰了起来。

运行官网提供的 helloworld-demo
官方 demo 相关链接:https://github.com/dubbogo/dubbo-samples/tree/master/golang/helloworld/dubbo

  1. dubbo-go 2.7 版本 QuickStart
    1)开启一个 go-server 服务
    将仓库 clone 到本地
    $ git clone https://github.com/dubbogo/dubbo-samples.git

进入 dubbo 目录
$ cd dubbo-samples/golang/helloworld/dubbo

进入目录后可看到四个文件夹,分别支持 go 和 java 的 client 以及 server,我们尝试运行一个 go 的 server。进入 app 子文件夹内,可以看到里面保存了 go 文件。

$ cd go-server/app

sample 文件结构
可以在 go-server 里面看到三个文件夹:app、assembly、profiles。

其中 app 文件夹下保存 go 源码,assembly 文件夹下保存可选的针对特定环境的 build 脚本,profiles 下保存配置文件。对于 dubbo-go 框架,配置文件非常重要,没有文件将导致服务无法启动。

设置指向配置文件的环境变量
由于 dubbo-go 框架依赖配置文件启动,让框架定位到配置文件的方式就是通过环境变量来找。对于 server 端需要两个必须配置的环境变量:CONF_PROVIDER_FILE_PATH、APP_LOG_CONF_FILE,分别应该指向服务端配置文件、日志配置文件。

在 sample 里面,我们可以使用 dev 环境,即 profiles/dev/log.yml 和 profiles/dev/server.yml 两个文件。在 app/ 下,通过命令行中指定好这两个文件:

$ export CONF_PROVIDER_FILE_PATH="…/profiles/dev/server.yml"

$ export APP_LOG_CONF_FILE="…/profiles/dev/log.yml"

设置 go 代理并运行服务
$ go run .

如果提示 timeout,则需要设置 goproxy 代理。

$ export GOPROXY=“http://goproxy.io”

再运行 go run 即可开启服务。

2)运行 zookeeper
安装 zookeeper,并运行 zkServer, 默认为 2181 端口。

3)运行 go-client 调用 server 服务
进入 go-client 的源码目录
$ cd go-client/app

同理,在 /app 下配置环境变量
$ export CONF_CONSUMER_FILE_PATH="…/profiles/dev/client.yml"

$ export APP_LOG_CONF_FILE="…/profiles/dev/log.yml"

配置 go 代理:

$ export GOPROXY=“http://goproxy.io”

运行程序
$ go run .

即可在日志中找到打印出的请求结果:

response result: &{A001 Alex Stocks 18 2020-10-28 14:52:49.131 +0800 CST}

同样,在运行的 server 中,也可以在日志中找到打印出的请求:

req:[]interface {}{“A001”}

rsp:main.User{Id:“A001”, Name:“Alex Stocks”, Age:18, Time:time.Time{…}

恭喜!一次基于 dubbo-go 的 rpc 调用成功。

4)常见问题
当日志开始部分出现 profiderInit 和 ConsumerInit 均失败的日志,检查环境变量中配置路径是否正确,配置文件是否正确。

当日志中出现 register 失败的情况,一般为向注册中心注册失败,检查注册中心是否开启,检查配置文件中关于 register 的端口是否正确。

sample 的默认开启端口为 20000,确保启动前无占用。

  1. 配置环境变量
    export APP_LOG_CONF_FILE="…/profiles/dev/log.yml"
    export CONF_CONSUMER_FILE_PATH="…/profiles/dev/client.yml"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值