使用 Yii2.0 創(chuàng)建微服務(wù)

使用 Yii2.0 創(chuàng)建微服務(wù)

概念


把一個(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(&#39;YII_DEBUG&#39;) or define(&#39;YII_DEBUG&#39;, true); defined(&#39;YII_ENV&#39;) or define(&#39;YII_ENV&#39;, &#39;dev&#39;);  require(__DIR__ . &#39;/../vendor/autoload.php&#39;); require(__DIR__ . &#39;/../vendor/yiisoft/yii2/Yii.php&#39;);  $config = require __DIR__ . &#39;/../config.php&#39;; (new yiiwebApplication($config))->run();

還要?jiǎng)?chuàng)建一個(gè)名為 config.php 的文件,它將包含所有的應(yīng)用程序配置:

<?php return [     &#39;id&#39; =>?'micro-app',  ????//設(shè)置`micro-app`的根目錄 ????'basePath'?=&gt;?__DIR__,  ????//?控制器所在目錄。 ????'controllerNamespace'?=&gt;?'microcontrollers',  ????//?設(shè)置命名空間為?micro ????'aliases'?=&gt;?[ ????????'@micro'?=&gt;?__DIR__, ????],  ????//默認(rèn)訪問地址 ????'defaultRoute'?=&gt;?'home/index',  ????'components'?=&gt;?[ ????????//請(qǐng)求配置 ????????'request'?=&gt;?[ ????????????'cookieValidationKey'?=&gt;?'test&amp;123456', ????????????'parsers'?=&gt;?[ ????????????????'application/json'?=&gt;?'yiiwebJsonParser', ????????????] ????????],  ????????//Url?美化 ????????'urlManager'?=&gt;?[ ????????????'enablePrettyUrl'?=&gt;?true, ????????????'showScriptName'?=&gt;?false, ????????????'enableStrictParsing'?=&gt;?false, ????????????'rules'?=&gt;?[ ????????????????'<controller:>/<action:>/<id:>'???=&gt;?'<controller>/<action>', ????????????], ????????],  ????????//數(shù)據(jù)庫(kù)配置 ????????'db'?=&gt;?[ ????????????'class'?=&gt;?'yiidbConnection', ????????????'dsn'?=&gt;?'mysql:host=localhost;dbname=micro', ????????????'username'?=&gt;?'root', ????????????'password'?=&gt;?'數(shù)據(jù)庫(kù)密碼', ????????????'charset'?=&gt;?'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 &#39;歡迎來到 Yii2.0 微服務(wù)!&#39;;     } }

如果您想為此控制器使用不同的名稱,則可以配置?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è)置正確的別名。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享