在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
Ocelot API Gateway 是一個 .NET 庫,實現了 API 閘道器常用的 API 閘道器模式,來處理跨多個微服務的請求。它作為一個輕量級的 API 閘道器,將客戶端的請求路由到下游服務。本文深入探討了 Ocelot API 閘道器如何位於客戶端和下游服務之間,涵蓋其安裝、配置、關鍵功能以及實際範例來展示其能力。我們還將探索 IronPDF 以及Ocelot API結合。
Ocelot 是一個開源的 API 閘道解決方案,專為 .NET 應用程序設計,以促進跨多個微服務的請求路由。它充當反向代理,管理來自客戶端的 HTTP 請求並將其路由到 ASP.NET Core 環境中的適當服務。Ocelot 建立在 ASP.NET Core 基礎上,無縫整合 .NET 生態系統,提供現代應用程序至關重要的強大功能。
在 Ocelot 功能的核心是其路由能力。它根據開發者指定的配置將傳入的請求匹配到相應的服務路由,並且可以與服務發現機制集成。這包括支持通配符路由,這在處理不同的 API 版本或大量服務端點時特別有用。
Ocelot 允許開發人員注入自定義的中介軟體或處理程序,這些程序可以在請求與回應到達客戶端或服務之前進行處理。這對於添加標頭、記錄請求,甚至根據需要修改回應結構非常有用。
Ocelot 內建支援多種負載均衡策略,例如循環調度(Round Robin)、最少連接(Least Connection)以及自訂提供者(自訂策略)。此功能可確保負載均勻分佈至可用服務之間,提高應用程式的整體韌性和效率。
保護 API 端點至關重要,Ocelot 提供了與現有認證提供者(例如 Identity Server)整合的支持。它支持流行的認證方案,包括 JWT 和 OAuth2,並允許對用戶訪問服務進行細粒度控制。
限速對於防止濫用和確保公平使用服務至關重要,通過限制用戶在某段時間內可以發出的請求數量來實現。服務質量 (QoS) (服務品質) 選項如設定超時和重試可確保服務在不同的網絡條件和負載下保持可用性和響應性。
要將 Ocelot 整合到您的專案中,您需要通過 NuGet 安裝 Ocelot 套件,並在 Program 類中進行配置:
Install-Package IronPdf
在您的 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
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 閘道的請求路由到不同的下游服務。
結合Ocelot與 IronPDF 在.NET應用程式中,提供了一個強大的解決方案,您可以將PDF生成請求路由到特定服務或在內部處理。在這裡,我將指導您設置一個使用Ocelot作為API Gateway和IronPDF的基本.NET Core應用程式。 從 HTML 生成 PDF.
首先,建立一個新的 .NET Core Web API 專案。您可以使用 .NET CLI 或 Visual Studio 完成這項操作。
使用 .NET:
dotnet new webapi -n OcelotWithIronPDF
cd OcelotWithIronPDF
你需要安裝 Ocelot 和 IronPDF。你可以通過 NuGet 添加這些包。
dotnet add package Ocelot
dotnet add package IronPdf
在專案的根目錄新增一個 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 以包含 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
在您的 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
確保您的應用程式正確配置以監聽 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 作為回應。
此範例展示了在同一應用程式中使用 IronPDF 的 Ocelot 基本實作。在生產場景中, 請考慮保障您的端點、處理錯誤情況, 以及根據您的特定需求優化 PDF 生成過程。
總之,Ocelot 是在微服務架構中管理和路由請求的絕佳選擇。其強大的功能,如路由、負載均衡、中間件支持和身份驗證,使其成為任何 .NET 開發人員的強大工具。通過遵循提供的詳細步驟,您可以有效地將 Ocelot 整合到您的 .NET 項目中,以簡化 API Gateway 的需求。
此外,如果您需要 PDF 生成功能,將 IronPDF 與 Ocelot 整合是直接了當的,可以增強您的應用程序功能。IronPDF 提供了 免費試用, 和許可證從 $749 開始,為您的 PDF 需求提供具有成本效益的解決方案。
透過結合 Ocelot 和 IronPDF,您可以構建一個全面且高效的微服務基礎設施,以滿足路由和文件生成需求。