概念
#把一個大型的單一應用程式和服務拆分為幾個甚至數十個的支援微服務,它可擴展單一元件而不是整個的應用程式堆疊,從而滿足服務等級協定。
傳統的開發模式就是把所有功能都放在一個套件裡,基本上不存在依賴,這樣的優勢在於開發簡單,集中式管理,功能都在本地,不存在分散式的管理和調度消耗。但缺點也很明顯:效率低,開發都在同一個專案改程式碼,互相等待,衝突不斷。穩定性差,一個微小的問題,都可能導致整個應用掛掉。另外在資源利用上表現出明顯的劣勢,例如電商雙11大促場景,下單壓力非常大,評價的壓力相對較少,那麼我們希望臨時增配應對雙11的大流程,只能全部增配,而不能定點只對訂單服務增配。所以微服務的架構開始慢慢流行並應用於大型的網站平台。
那麼介紹今天的主題,Yii 如何做微服務? Yii 可以輕鬆使用,而不需要基本和進階範本中包含的功能。換句話說,Yii 已經是一個微框架。不需要由範本提供的目錄結構與 Yii 一起工作。
安裝 Yii
為您的專案建立目錄並將工作目錄變更為該路徑。範例中使用的命令是基於 Unix 的,但在 Windows 中也存在類似的命令。
mkdir micro-app cd micro-app
Note:需要一些 Composer 的知識才能繼續。如果您還不知道如何使用 composer,請花點時間閱讀 Composer 指南。
使用您最喜愛的編輯器在micro-app 目錄下建立composer.json 檔案並新增以下內容:
{ "require": { "yiisoft/yii2": "~2.0.0" }, "repositories": [ { "type": "composer", "url": "https://asset-packagist.org" } ] }
儲存檔案並執行 composer install 命令。這將安裝框架及其所有依賴項。
建立專案結構
安裝框架之後,需要為此應用程式建立一個入口點。入口點是您嘗試開啟應用程式時將執行的第一個檔案。出於安全原因,建議將入口點檔案放在一個單獨的目錄中,並將其設定為Web根目錄。
建立一個web 目錄並將index.php 放入其中,內容如下:
<?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 yii\web\Application($config))->run();
還要建立一個名為config.php 的文件,它將包含所有的應用程式設定:
<?php return [ 'id' => 'micro-app', //设置`micro-app`的根目录 'basePath' => __DIR__, // 控制器所在目录。 'controllerNamespace' => 'micro\controllers', // 设置命名空间为 micro 'aliases' => [ '@micro' => __DIR__, ], //默认访问地址 'defaultRoute' => 'home/index', 'components' => [ //请求配置 'request' => [ 'cookieValidationKey' => 'test&123456', 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ] ], //Url 美化 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'enableStrictParsing' => false, 'rules' => [ '<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>', ], ], //数据库配置 'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=micro', 'username' => 'root', 'password' => '数据库密码', 'charset' => 'utf8', ], ], ];
Info:儘管設定可以保存在 index.php 檔案中,建議單獨使用它。這樣它也可以用於控制台應用程序,如下所示。
您的專案現在已經準備好編碼了。儘管由您決定專案目錄結構,只要您遵守命名空間即可。
建立第一個控制器
在建立控制器之前,建立一個 controllers/base 目錄並建立一個基礎控制器 BaseController。
<?php namespace micro\controllers\base; use yii\web\Controller; class BaseController extends Controller { //关闭 csrf 验证 public $enableCsrfValidation = false; }
然後在 controller 資料夾下面 新建一個 SiteController.php,這是預設的 控制器將處理沒有路徑資訊的請求。
<?php namespace micro\controllers; use yii\web\Controller; class HomeController extends BaseController { public function actionIndex() { return '欢迎来到 Yii2.0 微服务!'; } }
如果您想為此控制器使用不同的名稱,則可以設定 yii\base\Application::$defaultRoute 進行變更。例如,對於 HomeController 將會是 'defaultRoute' => 'home/index'。
在這一點上,專案結構應該如下所示:
micro-app/ ├── composer.json ├── config.php ├── web/ └── index.php └── controllers/ └── base └── BaseController.php └── HomeController.php └── vendor
如果您尚未設定 Web 伺服器,則可能需要查看Web伺服器設定檔範例。另一種選擇是使用 yii serve 命令,它將使用 PHP 內建 web 伺服器。您可以透過以下方式從micro-app / 目錄運行它:
vendor/bin/yii serve --docroot=./web
在瀏覽器中開啟應用程式網址現在應該列印出“歡迎來到Yii2.0 微服務!”,它已經在 HomeController: :actionIndex()返回。
Info:在我們的範例中,我們已將預設應用程式名稱空間app 變更為micro, 以表示您不受此名稱的限制(如果您是這樣認為), 然後調整 controllers namespace 並設定正確的別名。
以上是使用 Yii2.0 建立微服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!