.NET 幫助

Ocelot .NET(對開發人員的運作方式)

發佈 2024年6月6日
分享:

Ocelot API Gateway 是一個 .NET 庫,實現了 API 閘道器常用的 API 閘道器模式,來處理跨多個微服務的請求。它作為一個輕量級的 API 閘道器,將客戶端的請求路由到下游服務。本文深入探討了 Ocelot API 閘道器如何位於客戶端和下游服務之間,涵蓋其安裝、配置、關鍵功能以及實際範例來展示其能力。我們還將探索 IronPDF 以及Ocelot API結合。

Ocelot .NET 是什麼?

Ocelot .NET (對開發人員的工作方式):圖1 - Ocelot. NET 主頁

Ocelot 是一個開源的 API 閘道解決方案,專為 .NET 應用程序設計,以促進跨多個微服務的請求路由。它充當反向代理,管理來自客戶端的 HTTP 請求並將其路由到 ASP.NET Core 環境中的適當服務。Ocelot 建立在 ASP.NET Core 基礎上,無縫整合 .NET 生態系統,提供現代應用程序至關重要的強大功能。

Ocelot 的主要特點

路由

在 Ocelot 功能的核心是其路由能力。它根據開發者指定的配置將傳入的請求匹配到相應的服務路由,並且可以與服務發現機制集成。這包括支持通配符路由,這在處理不同的 API 版本或大量服務端點時特別有用。

中介軟體 / 委派處理程序

Ocelot 允許開發人員注入自定義的中介軟體或處理程序,這些程序可以在請求與回應到達客戶端或服務之前進行處理。這對於添加標頭、記錄請求,甚至根據需要修改回應結構非常有用。

負載均衡

Ocelot 內建支援多種負載均衡策略,例如循環調度(Round Robin)、最少連接(Least Connection)以及自訂提供者(自訂策略)。此功能可確保負載均勻分佈至可用服務之間,提高應用程式的整體韌性和效率。

認證和授權

保護 API 端點至關重要,Ocelot 提供了與現有認證提供者(例如 Identity Server)整合的支持。它支持流行的認證方案,包括 JWT 和 OAuth2,並允許對用戶訪問服務進行細粒度控制。

限速和服務質量 (QoS)

限速對於防止濫用和確保公平使用服務至關重要,通過限制用戶在某段時間內可以發出的請求數量來實現。服務質量 (QoS) (服務品質) 選項如設定超時和重試可確保服務在不同的網絡條件和負載下保持可用性和響應性。

在 .NET 專案中設定 Ocelot

要將 Ocelot 整合到您的專案中,您需要通過 NuGet 安裝 Ocelot 套件,並在 Program 類中進行配置:

Install-Package IronPdf

Ocelot .NET(對開發人員的運作方式):圖 2 - 通過 NuGet 套件管理器安裝 Ocelot .NET

在您的 Startup.cs 或 Program 類別中配置服務,包括請求構建器中介軟體,以設置服務容器:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Optionally handle ASP.NET Core environment settings
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    // Start Ocelot
    await app.UseOcelot();
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddOcelot();
}
public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // Optionally handle ASP.NET Core environment settings
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    // Start Ocelot
    await app.UseOcelot();
}
Public Sub ConfigureServices(ByVal services As IServiceCollection)
	services.AddOcelot()
End Sub
Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
	' Optionally handle ASP.NET Core environment settings
	If env.IsDevelopment() Then
		app.UseDeveloperExceptionPage()
	End If
	' Start Ocelot
	Await app.UseOcelot()
End Sub
VB   C#

在 Ocelot 中配置路由

Ocelot 使用配置文件,通常是 ocelot.json,來定義路由規則。以下是展示多個路由配置的更複雜示例:

{
    "ReRoutes": [
        {
            "DownstreamPathTemplate": "/api/users/{id}",
            "DownstreamScheme": "https",
            "DownstreamHostAndPorts": [
                {
                    "Host": "userapi.com",
                    "Port": 443
                }
            ],
            "UpstreamPathTemplate": "/users/{id}",
            "UpstreamHttpMethod": ["Get"]
        },
        {
            "DownstreamPathTemplate": "/api/products/{id}",
            "DownstreamScheme": "https",
            "DownstreamHostAndPorts": [
                {
                    "Host": "productapi.com",
                    "Port": 443
                }
            ],
            "UpstreamPathTemplate": "/products/{id}",
            "UpstreamHttpMethod": ["Get"]
        }
    ],
    "GlobalConfiguration": {
        "BaseUrl": "http://yourgateway.com"
    }
}

此配置指定如何根據路徑和 HTTP 方法使用 JSON 文件設置將對 API 閘道的請求路由到不同的下游服務。

使用 IronPDF 與 Ocelot .NET

Ocelot .NET(開發人員的工作原理):圖3 - IronPDF首頁

結合Ocelot與 IronPDF 在.NET應用程式中,提供了一個強大的解決方案,您可以將PDF生成請求路由到特定服務或在內部處理。在這裡,我將指導您設置一個使用Ocelot作為API Gateway和IronPDF的基本.NET Core應用程式。 從 HTML 生成 PDF.

第一步:建立 .NET Core 網頁應用程式

首先,建立一個新的 .NET Core Web API 專案。您可以使用 .NET CLI 或 Visual Studio 完成這項操作。

使用 .NET:

dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF

第2步:添加必要的包

你需要安裝 Ocelot 和 IronPDF。你可以通過 NuGet 添加這些包。

dotnet add package Ocelot
dotnet add package IronPdf

第3步:配置 Ocelot

在專案的根目錄新增一個 ocelot.json 文件,並添加以下內容以配置 Ocelot 的路由。本設定假設您希望 Ocelot 將生成 PDF 的請求路由到特定路徑,並由同一應用程式內的 IronPDF 處理。

{
    "ReRoutes": [
        {
            "DownstreamPathTemplate": "/api/pdf",
            "DownstreamScheme": "https",
            "DownstreamHostAndPorts": [
                {
                    "Host": "localhost",
                    "Port": 5001
                }
            ],
            "UpstreamPathTemplate": "/generatepdf",
            "UpstreamHttpMethod": ["Post"]
        }
    ],
    "GlobalConfiguration": {
        "BaseUrl": "http://localhost:5000"
    }
}

第四步:配置 Startup.cs

更新 Startup.cs 以包含 Ocelot 的中介軟體。確保您也配置應用程式以使用靜態文件,因為 IronPDF 可能需要從本地文件系統載入資產。

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddOcelot();
    }
    public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
        await app.UseOcelot();
    }
}
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddOcelot();
    }
    public async void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
        await app.UseOcelot();
    }
}
Public Class Startup
	Public Sub ConfigureServices(ByVal services As IServiceCollection)
		services.AddControllers()
		services.AddOcelot()
	End Sub
	Public Async Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
		If env.IsDevelopment() Then
			app.UseDeveloperExceptionPage()
		End If
		app.UseRouting()
		app.UseAuthorization()
		app.UseEndpoints(Sub(endpoints)
			endpoints.MapControllers()
		End Sub)
		Await app.UseOcelot()
	End Sub
End Class
VB   C#

步驟 5:使用 IronPDF 實作 PDF 產生

在您的 Controllers 資料夾中建立一個新的控制器 PdfController.cs。此控制器將處理 PDF 生成請求。

using Microsoft.AspNetCore.Mvc;
using IronPdf;
namespace OcelotWithIronPDF.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class PdfController : ControllerBase
    {
        [HttpPost]
        public IActionResult CreatePdfFromHtml([FromBody] string htmlContent)
        {
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            var output = pdf.BinaryData;
            return File(output, "application/pdf", "generated.pdf");
        }
    }
}
using Microsoft.AspNetCore.Mvc;
using IronPdf;
namespace OcelotWithIronPDF.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class PdfController : ControllerBase
    {
        [HttpPost]
        public IActionResult CreatePdfFromHtml([FromBody] string htmlContent)
        {
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            var output = pdf.BinaryData;
            return File(output, "application/pdf", "generated.pdf");
        }
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf
Namespace OcelotWithIronPDF.Controllers
	<ApiController>
	<Route("api/[controller]")>
	Public Class PdfController
		Inherits ControllerBase

		<HttpPost>
		Public Function CreatePdfFromHtml(<FromBody> ByVal htmlContent As String) As IActionResult
			Dim renderer = New ChromePdfRenderer()
			Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
			Dim output = pdf.BinaryData
			Return File(output, "application/pdf", "generated.pdf")
		End Function
	End Class
End Namespace
VB   C#

步驟 6: 執行應用程式

確保您的應用程式正確配置以監聽 ocelot.json 中指定的端口。您可以在 Properties/launchSettings.json 中設置這個配置。

{
  "profiles": {
    "OcelotWithIronPDF": {
      "commandName": "Project",
      "launchBrowser": false,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

現在,運行您的應用程序,您應該可以發佈 HTML 內容至 http://localhost:5000/generatepdf 並收到 PDF 作為回應。

Ocelot .NET(開發人員如何使用):圖4

此範例展示了在同一應用程式中使用 IronPDF 的 Ocelot 基本實作。在生產場景中, 請考慮保障您的端點、處理錯誤情況, 以及根據您的特定需求優化 PDF 生成過程。

結論

Ocelot .NET(對開發者的運作方式):圖5 - IronPDF 授權頁面

總之,Ocelot 是在微服務架構中管理和路由請求的絕佳選擇。其強大的功能,如路由、負載均衡、中間件支持和身份驗證,使其成為任何 .NET 開發人員的強大工具。通過遵循提供的詳細步驟,您可以有效地將 Ocelot 整合到您的 .NET 項目中,以簡化 API Gateway 的需求。

此外,如果您需要 PDF 生成功能,將 IronPDF 與 Ocelot 整合是直接了當的,可以增強您的應用程序功能。IronPDF 提供了 免費試用, 和許可證從 $749 開始,為您的 PDF 需求提供具有成本效益的解決方案。

透過結合 Ocelot 和 IronPDF,您可以構建一個全面且高效的微服務基礎設施,以滿足路由和文件生成需求。

< 上一頁
Microsoft.Extensions.Caching.Memory 範例 (含 PDF) 在 C#
下一個 >
NHibernate C#(開發人員如何使用)

準備開始了嗎? 版本: 2024.10 剛剛發布

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >