前言

部分微服务可能需要使用Composer工具安装第三方工具包,普遍的做法是直接在微服务目录下直接放置composer.json,但是这其中存在两个问题:

  • 在微服务目录内运行composer update安装的工具包,主项目无法自动加载,需要微服务在代码里手动引用
  • 运行composer update安装工具包时,这些工具包通常需要依赖一些基础工具包,很多微服务依赖的基础工具包可能重合,甚至和主项目的依赖包重合。每个微服务都单独安装完整的工具包的话,会导致项目过于臃肿,代码冗余,这背离了微服务的初衷。

为了解决这些问题,微服务框架使用Composer的 Repositories 工具来解决以上的问题,在需要用到composer的项目,需要严格依照下文的规范,将composer.json与微服务、项目完美结合。

规范

composer.json

微服务的composer.json文件需要放置在每个微服务的根目录下,JSON文件的“name”属性必须严格按以下的命名方式(其中“identity”为微服务标识):
microserver/identity
参考如下:

  1. {
  2. "name": "microserver/storage",
  3. "description": "description",
  4. "minimum-stability": "stable",
  5. "license": "proprietary",
  6. "authors": [
  7. {
  8. "name": "Shenwa Studio.",
  9. "email": "shenwa@gxit.org"
  10. }
  11. ],
  12. "require": {
  13. }
  14. }

require

安装微服务时,框架不会自动运行composer update来安装依赖包,需要开发者或者维护人员手动安装。
在开发微服务需要引用到第三方工具包的对应类时,可以先使用Composer()方法来判断依赖是否已经安装,如未安装则会自动进入安装向导。

开发环境

在开发环境中,需要到微服务目录下,运行 composer update 命令
注:发布服务时,安装包内不能含有 vendor 目录和 composer.lock 文件

  1. #其中“identity”为微服务标识
  2. cd /www/wwwroot/yoursite/servers/identity/
  3. 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
}

该方法的更多说明请点此查看