前言
部分微服务可能需要使用Composer工具安装第三方工具包,普遍的做法是直接在微服务目录下直接放置composer.json,但是这其中存在两个问题:
- 在微服务目录内运行composer update安装的工具包,主项目无法自动加载,需要微服务在代码里手动引用
- 运行composer update安装工具包时,这些工具包通常需要依赖一些基础工具包,很多微服务依赖的基础工具包可能重合,甚至和主项目的依赖包重合。每个微服务都单独安装完整的工具包的话,会导致项目过于臃肿,代码冗余,这背离了微服务的初衷。
为了解决这些问题,微服务框架使用Composer的 Repositories 工具来解决以上的问题,在需要用到composer的项目,需要严格依照下文的规范,将composer.json与微服务、项目完美结合。
规范
composer.json
微服务的composer.json文件需要放置在每个微服务的根目录下,JSON文件的“name”属性必须严格按以下的命名方式(其中“identity”为微服务标识):
microserver/identity
参考如下:
{"name": "microserver/storage","description": "description","minimum-stability": "stable","license": "proprietary","authors": [{"name": "Shenwa Studio.","email": "shenwa@gxit.org"}],"require": {}}
require
安装微服务时,框架不会自动运行composer update来安装依赖包,需要开发者或者维护人员手动安装。
在开发微服务需要引用到第三方工具包的对应类时,可以先使用Composer()方法来判断依赖是否已经安装,如未安装则会自动进入安装向导。
开发环境
在开发环境中,需要到微服务目录下,运行 composer update 命令
注:发布服务时,安装包内不能含有 vendor 目录和 composer.lock 文件
#其中“identity”为微服务标识cd /www/wwwroot/yoursite/servers/identity/composer update
生产环境
在生产环境中,需要到项目根目录下,运行 composer require microserver/identity 命令,其中“identity”为微服务标识
cd /www/wwwroot/yoursite/
composer require microserver/identity
自动加载
在生产环境时,如果已经完成了上一步骤的 require 操作,则该依赖已经安装到整个项目,在整个的任何位置都可以直接使用工具包对应的类,不需要做额外的引用操作。
但是为了代码和开发项目的严谨性,应该在使用到第三方依赖包的类和函数前,都应该先使用Composer()方法来判断依赖是否已安装,该方法的作用是判断第三方类是否已加载,未加载则说明工具包可能为安装,此时系统会自动进入composer安装引导。
public function remoteUpload($file){
//在使用第三方类前先通过Composer()方法判断是否已加载
$this->Composer("JohnLui\AliyunOSS");
//Todo something
}
该方法的更多说明请点此查看
