關(guān)于 Laravel 微服務(wù)你需要知道的一切

言鼎科技 2023-06-05 685

Laravel 微服務(wù)簡介

正如您必須知道的,或者正如微服務(wù)定義所暗示的那樣,微服務(wù)是可自由部署的服務(wù)的集合。它是一種將應(yīng)用程序軟件構(gòu)建為可獨(dú)立部署、緊湊、模塊化服務(wù)的集合的方法。在此,每個服務(wù)執(zhí)行不同的操作,并通過簡單、定義明確的接口相互交互。

鑒于此,您一定在思考我們?nèi)绾问褂?Laravel 來實(shí)現(xiàn)它。Laravel 架構(gòu)如何在微服務(wù)上工作?好吧,這就是 PHP Laravel 微服務(wù)的工作原理!

Laravel 微服務(wù)架構(gòu)

在開始微服務(wù)上的 Laravel 架構(gòu)之前,讓我們先談?wù)?Laravel。Laravel 是用于開發(fā)自定義應(yīng)用程序的最廣泛使用的框架之一。Laravel 為其開發(fā)人員提供了適當(dāng)?shù)墓ぞ邅韯?chuàng)建從網(wǎng)站到 Web 應(yīng)用程序的任何內(nèi)容??偠灾?,部署更快、維護(hù)更容易、更可靠。

如果我們用數(shù)字說話,Laravel 在全球擁有超過 56,000 名開發(fā)人員。它是 GitHub 上星級最高的 PHP 框架,功能強(qiáng)大。

Laravel 的微服務(wù)架構(gòu)

與將應(yīng)用程序構(gòu)建為單個結(jié)構(gòu)時使用的整體架構(gòu)風(fēng)格相反,微服務(wù)是一種將單個程序開發(fā)為一組獨(dú)立部分的方法,服務(wù)由 API 連接。它允許創(chuàng)建多個微服務(wù),這些微服務(wù)可以由不同的團(tuán)隊(duì)控制并使用不同的編程語言進(jìn)行編碼。

這里的微服務(wù)是一種軟件架構(gòu),它以模塊化的方式統(tǒng)一大量的 Laravel 應(yīng)用程序,這取決于專注于特定職責(zé)和活動的小型構(gòu)建塊。塊通過一組獨(dú)立于語言/與語言無關(guān)的 API 相互交互。

Dew Computing 是一個與Laravel 架構(gòu)風(fēng)格相關(guān)的概念,通過使用微服務(wù)架構(gòu)來計(jì)算許多小露水(表示微服務(wù)的功能組件)的潛力。

現(xiàn)代企業(yè)需要微服務(wù)架構(gòu)的 3 個主要原因是:
● 抵御流量故障或性能激增。
● 優(yōu)雅地?cái)U(kuò)展
● 減少參與每個代碼庫的人數(shù)。

Laravel 微服務(wù)的優(yōu)勢

微服務(wù)設(shè)計(jì)有幾個優(yōu)點(diǎn)。一般來說,Laravel 中的微服務(wù)是有針對性的,允許它們更輕,運(yùn)行速度更快。

而且,它只涉及微服務(wù)API調(diào)用。某些服務(wù)可能使用不同的語言。例如,通知服務(wù)可能是用 NodeJs 編寫的。因此,不強(qiáng)制使用 Laravel 或 Lumen。

根據(jù)使用情況,每個服務(wù)都可以擴(kuò)展??傊?,它可能適用于大型應(yīng)用程序。除此之外,Laravel 微服務(wù)的一些優(yōu)點(diǎn)是:



  • 一對一部署

部署起來更簡單。由于微服務(wù)可以在不同的虛擬機(jī)、物理機(jī)或 Docker 容器上實(shí)現(xiàn),因此出現(xiàn)問題時系統(tǒng)崩潰的危險較小。這是因?yàn)榉?wù)是完全獨(dú)立的。

  • 彈性模塊邊界

微服務(wù)加強(qiáng)了模塊化架構(gòu),這對于更大的團(tuán)隊(duì)來說是必不可少的。

  • 升級和維護(hù)的簡單性

微服務(wù)可以很容易地自主升級和維護(hù),因?yàn)樗鼈兘⒃诜蛛x的基礎(chǔ)上。

  • 技術(shù)多樣性

開發(fā)人員可以使用各種開發(fā)框架、編碼語言和數(shù)據(jù)存儲系統(tǒng)來組合微服務(wù)。

  • 適用于所有編碼語言

開發(fā)人員可以使用他們熟悉的任何編程語言來創(chuàng)建微服務(wù)。因此,他們隨后可以根據(jù) REST 或 RPC 協(xié)議提供 API。

通過我們的 Laravel 微服務(wù)獲得定制的成功路線圖
利用我們微服務(wù)架構(gòu)專家的專業(yè)知識為關(guān)鍵任務(wù)業(yè)務(wù)解決方案開發(fā)低延遲應(yīng)用程序。與頂級
Laravel 開發(fā)公司合作,享受您的成功。

你什么時候應(yīng)該選擇使用 Laravel 微服務(wù)?

通常,您應(yīng)該在應(yīng)用程序時使用 Laravel 微服務(wù),

  • 正在從頭開始建造。

  • 是一個單體程序。

  • 重建(或重構(gòu))遺產(chǎn)

  • 向已經(jīng)存在的應(yīng)用程序引入新功能。

  • 有一個挑戰(zhàn)是擴(kuò)展。

  • 生產(chǎn)力低下。

  • 變得難以維護(hù)。

在任何這些情況下,都可以實(shí)現(xiàn) Laravel 微服務(wù)框架。但是,它經(jīng)常被用來將單一的舊應(yīng)用程序轉(zhuǎn)換為微服務(wù)架構(gòu)。

本質(zhì)上,有 4 個基本原因:

  • 由于應(yīng)用程序變得太大而開發(fā)人員無法理解,因此出現(xiàn)了組織和項(xiàng)目擴(kuò)展方面的挑戰(zhàn)。

  • 該應(yīng)用程序分為多個組件,每個組件都有自己獨(dú)立的更新和發(fā)布周期。

  • 有必要在不影響其他組件的情況下動態(tài)地上下擴(kuò)展某些系統(tǒng)組件。

  • 不同的系統(tǒng)組件具有獨(dú)特的行業(yè)或技術(shù)要求,迫使開發(fā)人員采用團(tuán)隊(duì)標(biāo)準(zhǔn)編程語言以外的編程語言或框架。

如何使用 Laravel Lumen 構(gòu)建微服務(wù)(教程)

在這個 Laravel 微服務(wù)教程中,我們將學(xué)習(xí)如何在 Laravel (Lumen) 中創(chuàng)建微服務(wù);按照這個循序漸進(jìn)的教程;您可以為您的應(yīng)用程序創(chuàng)建 API。



關(guān)于 Laravel-Lumen

和 Laravel 一樣,Lumen 也是由Taylor Otwell創(chuàng)建的,它的設(shè)計(jì)考慮了微框架架構(gòu)。有更多框架(Slim、Silex),如 Lumen,可用于微服務(wù)。

初始設(shè)置

要安裝 Lumen,您必須先安裝 composer。您可以訪問 getcomposer.org 下載最新版本的Composer

安裝流明

通過 Composer 安裝 Lumen:

關(guān)于 Laravel 微服務(wù)你需要知道的一切
composer global 需要“l(fā)aravel/lumen-installer”

下面的命令將創(chuàng)建一個具有所有必需依賴項(xiàng)的新 Lumen 項(xiàng)目。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
流明新演示

使用以下命令為您的應(yīng)用程序提供服務(wù)。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
php -S localhost:8000 -t public

配置您的應(yīng)用程序

第 1 步:配置

在 .env 文件中,將值替換為以下值,并填寫數(shù)據(jù)庫的詳細(xì)信息。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
CACHE_DRIVER=數(shù)組QUEUE_DRIVER=數(shù)據(jù)庫DB_DATABASE=應(yīng)用程序DB_USERNAME=數(shù)據(jù)庫密碼=

數(shù)據(jù)庫和遷移

我們將創(chuàng)建一個遷移文件。該文件通過運(yùn)行 migrate 命令自動在連接的數(shù)據(jù)庫中創(chuàng)建表。將在內(nèi)部創(chuàng)建一個遷移文件數(shù)據(jù)庫/遷移目錄.

關(guān)于 Laravel 微服務(wù)你需要知道的一切
php artisan make:遷移創(chuàng)建產(chǎn)品表

將以下代碼添加到創(chuàng)建的CreateProductsTable遷移文件中。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
使用 Illuminate\Database\Migrations\Migration;使用 Illuminate\Database\Schema\Blueprint;使用 Illuminate\Support\Facades\Schema;類 CreateProductsTable 擴(kuò)展遷移{
  /**
   * 運(yùn)行遷移。
   *
   * @return 無效
   */
  公共功能向上()
  {
      Schema::create('products', function (Blueprint $table) {
          $table->bigIncrements('id');
          $table->string('名字');
          $table->integer('價格');
          $table->longText('描述');          
          $表->時間戳();
      });
  }
  /**
   * 反轉(zhuǎn)遷移。
   *
   * @return 無效
   */
  公共功能向下()
  {
      模式::dropIfExists('產(chǎn)品');
  }}

運(yùn)行此命令。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
php 工匠遷移

創(chuàng)建模型文件

Lumen 不支持下面給出的make:命令

關(guān)于 Laravel 微服務(wù)你需要知道的一切
php artisan make:model 產(chǎn)品

轉(zhuǎn)到 app 目錄,創(chuàng)建一個名為Product.php的新模型并粘貼以下代碼。

應(yīng)用程序/Product.php

關(guān)于 Laravel 微服務(wù)你需要知道的一切
命名空間應(yīng)用;使用 Illuminate\Database\Eloquent\Model;類產(chǎn)品擴(kuò)展模型{
  受保護(hù)的 $table = '產(chǎn)品';
  /**
   * 可批量分配的屬性。
   *
   * @var 數(shù)組
   */
  受保護(hù)的 $fillable = [
      '名稱','價格','描述'
  ];}

現(xiàn)在通過取消注釋位于bootstrap/app.php目錄中的以下代碼來加載 Eloquent 和 Facades 。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
$app->withFacades();$app->withEloquent();$app->register(App\Providers\AppServiceProvider::class);$app->register(App\Providers\AuthServiceProvider::class);$app->register(App\Providers\EventServiceProvider::class);

設(shè)置控制器文件

前往應(yīng)用\Http\控制器并創(chuàng)建一個新文件產(chǎn)品控制器.php并粘貼下面提到的代碼。

// 應(yīng)用程序/http/controllers/ProductController.php

關(guān)于 Laravel 微服務(wù)你需要知道的一切
命名空間 App\Http\Controllers;使用應(yīng)用\產(chǎn)品;使用 Illuminate\Http\Request;類 ProductController 擴(kuò)展控制器{
  /**
   * 創(chuàng)建一個新的控制器實(shí)例。
   *
   * @return 無效
   */
  公共函數(shù) __construct()
  {
      //
  }
 
   公共函數(shù)索引()
   {
 
     $products = Product::all();
     返回響應(yīng)()->json($產(chǎn)品);
   }
   公共函數(shù)創(chuàng)建(請求 $request)
   {
     $product = 新產(chǎn)品;
     $product->name= $request->name;
     $product->price = $request->price;
     $product->description= $request->description;
   
     $產(chǎn)品->保存();
     返回響應(yīng)()->json($product);
   }
   公共功能顯示($id)
   {
      $product = Product::find($id);
      返回響應(yīng)()->json($product);
   }
   公共功能更新(請求 $request,$id)
   {
      $product= Product::find($id);
     
      $product->name = $request->input('name');
      $product->price = $request->input('price');
      $product->description = $request->input('description');
      $產(chǎn)品->保存();
      返回響應(yīng)()->json($product);
   }
   公共函數(shù)銷毀($id)
   {
      $product = Product::find($id);
      $產(chǎn)品->刪除();
      return response()->json('產(chǎn)品移除成功');
   }
}

設(shè)置路線文件

現(xiàn)在將此代碼添加到 routes/web.php。為我們的路由創(chuàng)建組路由函數(shù)并為它們添加前綴。

關(guān)于 Laravel 微服務(wù)你需要知道的一切
$router->group(['prefix'=>'api/v1'], function() 使用($router){
  $router->get('/items', ' ProductController@index ');
  $router->post('/items', ' ProductController@create ');
  $router->get('/items/{id}', ' ProductController@show ');
  $router->put('/items/{id}', ' ProductController@update ');
  $router->delete('/items/{id}', ' ProductController@destroy ');});

測試 API

我們可以使用postman來測試API;如果你使用VScode,你也可以用迅雷客戶端測試API。在本教程中,我們將使用郵遞員。

方法 – GET – 請求所有項(xiàng)目預(yù)覽:

網(wǎng)址 – http://localhost:8000/api/v1/items

關(guān)于 Laravel 微服務(wù)你需要知道的一切

方法 - GET - 帶有單項(xiàng)預(yù)覽的請求:

網(wǎng)址 – http://localhost:8000/api/v1/items/1

關(guān)于 Laravel 微服務(wù)你需要知道的一切

方法- POST - 請求插入新項(xiàng)目預(yù)覽:

網(wǎng)址- http://localhost:8000/api/v1/items

關(guān)于 Laravel 微服務(wù)你需要知道的一切

方法 - PUT -請求更新項(xiàng)目預(yù)覽:

網(wǎng)址- http://localhost:8000/api/v1/items/5

關(guān)于 Laravel 微服務(wù)你需要知道的一切

方法 - DELETE - 請求刪除項(xiàng)目預(yù)覽:

網(wǎng)址- http://localhost:8000/api/v1/items/5

關(guān)于 Laravel 微服務(wù)你需要知道的一切

鑰匙帶走

通過這個實(shí)用的 Laravel 微服務(wù)示例,我們來到了這篇博文的結(jié)尾。如果您是現(xiàn)代企業(yè)并希望通過 Laravel 框架利用微服務(wù),我們將是您的最佳選擇。Bacancy 擁有一群擁有不同行業(yè)經(jīng)驗(yàn)的 Laravel 開發(fā)人員。在競爭中保持領(lǐng)先地位,讓您的用戶對您的服務(wù)垂涎三尺。從我們這里聘請 Laravel 開發(fā)人員,為您的用戶提供令人緊張的體驗(yàn)。

言鼎科技)專做軟件開發(fā),微信小程序,網(wǎng)站開發(fā),軟件外包,手機(jī)APP開發(fā),歡迎資訊!

The End