服务注册&发现&下线¶
1.服务注册¶
服务注册,是指nova服务启动后,注册到服务中心,告诉服务中心该服务可用。
流程:swoole_server在master进程启动后,获取api提供的services与method,发送post请求注册到注册中心。目前所有的服务注册都是通过本地代理haunt连接etcd,注册成功的服务可以从etcd拉取注册信息 。
1.1.配置¶
需要注册的服务位于resource/config/$ENV/nova.php,目前所有的服务通过haunt注册,haunt的地址配置见resource/config/$ENV/haunt.php。
2.服务发现¶
服务发现,是nova服务启动后,从服务中心拉取需要的服务列表,并建立nova链接;监听服务中心,拉取服务列表的变化,若服务下线,则将对应的nova链接下线,若新服务上线,则建立对应的nova链接,供业务使用。
2.1.配置¶
服务发现直接从etcd拉取服务信息,具体配置为resource/config/$ENV/haunt.php,需要发现的服务会在程序启动时自动拉取服务信息。
2.2.本地开发配置¶
本地开发若不想走服务发现,直连本机的nova服务端,需要加入如下配置
新加在config下加入.private文件夹,修改.gitignore加入 .private/该目录不推送到git仓库中
在.private里加入service_discovery.php文件
- <?php
- return [
- //不需要服务发现app_names
- 'app_names' => [
- 'xxx-api',
- ],
- //不需要服务发现app的novaApi配置
- 'novaApi' => [
- 'xxx-api' => [//注意此处key为不需要服务发现app_names
- 'path' => 'vendor/nova-service/xxx-api/gen-php',
- 'namespace' => 'Com\\Youzan\\Xx\\',
- ],
- ],
- //直连的app host port
- 'connection' => [
- 'xxx-api' => [//注意此处key为不需要服务发现app_names
- 'host' => '127.0.0.1',
- 'port' => '9000',
- ],
- ],
- ];
3.服务下线¶
服务下线的工具目前尚未对外开源,开发者可自行参考实现。3.1.配置~~~~
需要在PHP服务化业务应用根目录的composer.json中做如下改动:
- "zan-tools/publish":"dev-master",
在require中增加下面代码(注意最后逗号是否需要加)
- "scripts": {
- //如果是http server
- "post-update-cmd": "Com\\Youzan\\Tools\\Publish\\Http::postUpdate"
- //如果是tcp server
- "post-update-cmd": "Com\\Youzan\\Tools\\Publish\\Tcp::postUpdate"
- }
执行composer update
查看根目录bin/publish下面是否有生成出来的shell文件,如果有则表示正常,下次提交发布时可以将publish带上去一起发布。
3.2.下线¶
Tcp¶
- /home/www/%(appName)/bin/publish/offline.sh %(appName)
- /home/www/%(appName)/bin/publish/online.sh %(appName)
执行脚本完成后,重新拉取ectd信息即可确认服务是否已经下线。拉取信息的url组成规则为
- curl "http://{host}:{port}/v2/keys/{protocol}:{domain}/{appName}"
protocol、domain和appName为Nova服务发布时的配置项,具体见应用配置nova.php.
protocol默认值为nova,domain默认值为com.youzan.service,如
curl“http://xx.xx.xx.xx:xx/v2/keys/nova:com.youzan.service/scrm-customer-base”
Http¶
- /home/www/%(appName)/bin/publish/offline.sh
- /home/www/%(appName)/bin/publish/online.sh
原文: http://zanphpdoc.zanphp.io/libs/soa/service_discovery.html