1. 程式人生 > >.Net微服務實踐(二):Ocelot介紹和快速開始

.Net微服務實踐(二):Ocelot介紹和快速開始

[TOC] 上篇[.Net微服務實踐(一):微服務框架選型](https://www.cnblogs.com/lcyhjx/p/12641840.html) 我們對微服務框架整體做了介紹,接下來我們從閘道器Ocelot開始,一一開始實踐 # 介紹 Ocelot是一個用.NET Core實現並且開源的API閘道器,它功能強大,包括了:**路由、請求聚合、服務發現、認證、鑑權、限流熔斷**、並內建了**負載均衡器**與Service Fabric、Butterfly、Tracing整合。這些功能只都只需要簡單的配置即可完成,下面我們會對這些功能的配置一一進行說明。 # 基本原理 簡單的來說Ocelot是一堆的asp.net core middleware組成的一個管道。當它拿到請求之後會用一個request builder來構造一個HttpRequestMessage發到下游的真實伺服器,等下游的服務返回response之後再由一個middleware將它返回的HttpResponseMessage對映到HttpResponse物件並返回給客戶端。 # 整合方式 **基本整合** ![](https://img2020.cnblogs.com/blog/60140/202004/60140-20200406215308883-1231313184.png) 用一臺web service來host Ocelot,在這裡有一個json配置檔案,裡面設定了所有對當前這個閘道器的配置。它會接收所有的客戶端請求,並路由到對應的下游伺服器進行處理,再將請求結果返回。而這個上下游請求的對應關係也被稱之為路由。 **整合IdentityServer** ![](https://img2020.cnblogs.com/blog/60140/202004/60140-20200406215342919-1154296130.png) 當我們涉及到認證和鑑權的時候,我們可以跟Identity Server進行結合。當閘道器需要請求認證資訊的時候會與Identity Server伺服器進行互動來完成。 **閘道器叢集** ![](https://img2020.cnblogs.com/blog/60140/202004/60140-20200406215421852-925590767.png) 只有一個閘道器是很危險的,也就是我們通常所講的單點,只要它掛了,所有的服務全掛。這顯然無法達到高可用,所以我們也可以部署多臺Ocelot閘道器。當然這個時候在多臺閘道器前,你還需要一臺負載均衡器 **Consul服務發現** ![](https://img2020.cnblogs.com/blog/60140/202004/60140-20200406215443995-153305523.png) 在Ocelot已經支援簡單的負載功能,也就是當下遊服務存在多個結點的時候,Ocelot能夠承擔起負載均衡的作用。但是它不提供健康檢查,服務的註冊也只能通過手動在配置檔案裡面新增完成。這不夠靈活並且在一定程度下會有風險。這個時候我們就可以用Consul來做服務發現,它能與Ocelot完美結合。 **整合Service Fabric** ![](https://img2020.cnblogs.com/blog/60140/202004/60140-20200406215503756-9933394.png) # 快速開始 ## 建立訂單服務 - 新建一個新建asp.net core web api專案,命名為order-api, 模擬訂單服務 - 在order-api專案中,新增一個order api ``` [ApiController] public class OrderController : ControllerBase { // GET: api/Product [Route("api/orders")] [HttpGet] public IEn