概念
把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)個(gè)甚至數(shù)十個(gè)的支持微服務(wù),它可擴(kuò)展單個(gè)組件而不是整個(gè)的應(yīng)用程序堆棧,從而滿足服務(wù)等級(jí)協(xié)議。
傳統(tǒng)的開發(fā)模式就是把所有功能都放在一個(gè)包里,基本不存在依賴,這樣的優(yōu)勢(shì)在于開發(fā)簡(jiǎn)單,集中式管理,功能都在本地,不存在分布式的管理和調(diào)度消耗。但缺點(diǎn)也很明顯:效率低,開發(fā)都在同一個(gè)項(xiàng)目改代碼,相互等待,沖突不斷。穩(wěn)定性差,一個(gè)微小的問題,都可能導(dǎo)致整個(gè)應(yīng)用掛掉。另外在資源利用上表現(xiàn)出明顯的劣勢(shì),比如電商雙11大促場(chǎng)景,下單壓力非常大,評(píng)價(jià)的壓力相對(duì)較少,那么我們希望臨時(shí)增配應(yīng)對(duì)雙11的大流程,只能全部增配,而不能定點(diǎn)只對(duì)訂單服務(wù)增配。所以微服務(wù)的架構(gòu)開始慢慢流行并應(yīng)用于大型的網(wǎng)站平臺(tái)。
推薦:《Yii2.0框架入門與實(shí)戰(zhàn)項(xiàng)目開發(fā)視頻教程》
那么引入今天的主題,Yii 如何做微服務(wù)?Yii 可以輕松使用,而不需要基本和高級(jí)模板中包含的功能。換句話說,Yii 已經(jīng)是一個(gè)微框架。不需要由模板提供的目錄結(jié)構(gòu)與 Yii 一起工作。
安裝 Yii
為您的項(xiàng)目創(chuàng)建一個(gè)目錄并將工作目錄更改為該路徑。示例中使用的命令是基于 Unix 的,但在 Windows 中也存在類似的命令。
mkdir?micro-app cd?micro-app
Note:需要一些 Composer 的知識(shí)才能繼續(xù)。如果您還不知道如何使用 composer,請(qǐng)花些時(shí)間閱讀 Composer 指南。
使用您最喜愛的編輯器在 micro-app 目錄下創(chuàng)建 composer.json 文件并添加以下內(nèi)容:
{ ????"require":?{ ????????"yiisoft/yii2":?"~2.0.0" ????}, ????"repositories":?[ ????????{ ????????????"type":?"composer", ????????????"url":?"https://asset-packagist.org" ????????} ????] }
保存文件并運(yùn)行 composer install 命令。這將安裝框架及其所有依賴項(xiàng)。
創(chuàng)建項(xiàng)目結(jié)構(gòu)
安裝框架之后,需要為此應(yīng)用程序創(chuàng)建一個(gè)入口點(diǎn)。入口點(diǎn)是您嘗試打開應(yīng)用程序時(shí)將執(zhí)行的第一個(gè)文件。出于安全原因,建議將入口點(diǎn)文件放在一個(gè)單獨(dú)的目錄中,并將其設(shè)置為Web根目錄。
創(chuàng)建一個(gè) web 目錄并將 index.php 放入其中,內(nèi)容如下:
<?php // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require __DIR__ . '/../config.php'; (new yiiwebApplication($config))->run();
還要?jiǎng)?chuàng)建一個(gè)名為 config.php 的文件,它將包含所有的應(yīng)用程序配置:
<?php return [ 'id' =>?'micro-app', ????//設(shè)置`micro-app`的根目錄 ????'basePath'?=>?__DIR__, ????//?控制器所在目錄。 ????'controllerNamespace'?=>?'microcontrollers', ????//?設(shè)置命名空間為?micro ????'aliases'?=>?[ ????????'@micro'?=>?__DIR__, ????], ????//默認(rèn)訪問地址 ????'defaultRoute'?=>?'home/index', ????'components'?=>?[ ????????//請(qǐng)求配置 ????????'request'?=>?[ ????????????'cookieValidationKey'?=>?'test&123456', ????????????'parsers'?=>?[ ????????????????'application/json'?=>?'yiiwebJsonParser', ????????????] ????????], ????????//Url?美化 ????????'urlManager'?=>?[ ????????????'enablePrettyUrl'?=>?true, ????????????'showScriptName'?=>?false, ????????????'enableStrictParsing'?=>?false, ????????????'rules'?=>?[ ????????????????'<controller:>/<action:>/<id:>'???=>?'<controller>/<action>', ????????????], ????????], ????????//數(shù)據(jù)庫(kù)配置 ????????'db'?=>?[ ????????????'class'?=>?'yiidbConnection', ????????????'dsn'?=>?'mysql:host=localhost;dbname=micro', ????????????'username'?=>?'root', ????????????'password'?=>?'數(shù)據(jù)庫(kù)密碼', ????????????'charset'?=>?'utf8', ????????], ????], ];</action></controller></id:></action:></controller:>
Info:盡管配置可以保存在?index.php?文件中,建議單獨(dú)使用它。 這樣它也可以用于控制臺(tái)應(yīng)用程序,如下所示。
您的項(xiàng)目現(xiàn)在已經(jīng)準(zhǔn)備進(jìn)行編碼了。盡管由您決定項(xiàng)目目錄結(jié)構(gòu),只要您遵守命名空間即可。
創(chuàng)建第一個(gè)控制器
在創(chuàng)建控制器之前,創(chuàng)建一個(gè)?controllers/base?目錄并創(chuàng)建一個(gè)基礎(chǔ)控制器 BaseController。
<?php namespace microcontrollersbase; use yiiwebController; class BaseController extends Controller { //關(guān)閉 csrf 驗(yàn)證 public $enableCsrfValidation = false; }
然后在 controller 文件夾下面 新建一個(gè)?SiteController.php,這是默認(rèn)的 控制器將處理沒有路徑信息的請(qǐng)求。
<?php namespace microcontrollers; use yiiwebController; class HomeController extends BaseController { public function actionIndex() { return '歡迎來到 Yii2.0 微服務(wù)!'; } }
如果您想為此控制器使用不同的名稱,則可以配置?yiibaseApplication::$defaultRoute?進(jìn)行更改。 例如,對(duì)于?HomeController?將會(huì)是?‘defaultRoute’ => ‘home/index’。
在這一點(diǎn)上,項(xiàng)目結(jié)構(gòu)應(yīng)該如下所示:
micro-app/ ├──?composer.json ├──?config.php ├──?web/ ????└──?index.php └──?controllers/ ????└──?base ????????└──?BaseController.php ????└──?HomeController.php └──?vendor
如果您尚未設(shè)置 Web 服務(wù)器,則可能需要查看Web服務(wù)器配置文件示例。 另一種選擇是使用 yii serve 命令,它將使用 PHP 內(nèi)置 web 服務(wù)器。 您可以通過以下方式從 micro-app / 目錄運(yùn)行它:
vendor/bin/yii?serve?--docroot=./web
在瀏覽器中打開應(yīng)用程序URL現(xiàn)在應(yīng)該打印出“歡迎來到 Yii2.0 微服務(wù)!”,它已經(jīng)在?HomeController::actionIndex()中返回。
Info:在我們的示例中,我們已將默認(rèn)應(yīng)用程序名稱空間 app 更改為 micro, 以表明您不受此名稱的限制(如果您是這樣認(rèn)為), 然后調(diào)整?controllers namespace?并設(shè)置正確的別名。