日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)

發(fā)布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

來源:https://www.cnblogs.com/7tiny/p/10493805.html

【前言】

Ocelot是一個用.NET Core實現(xiàn)并且開源的API網(wǎng)關(guān),它功能強大,包括了:路由、請求聚合、服務(wù)發(fā)現(xiàn)、認(rèn)證、鑒權(quán)、限流熔斷、并內(nèi)置了負(fù)載均衡器與Service Fabric、Butterfly Tracing集成。這些功能只都只需要通過一個統(tǒng)一的Ocelot.Json配置文件簡單的配置即可完成。

簡單的來說Ocelot是一堆的asp.net core?middleware組成的一個管道。

當(dāng)它拿到請求之后會用一個request builder來構(gòu)造一個HttpRequestMessage發(fā)到下游的真實服務(wù)器,等下游的服務(wù)返回response之后再由一個middleware將它返回的HttpResponseMessage映射到HttpResponse上。

Ocelot的基本使用

用一臺web service來host Ocelot,在這里有一個json配置文件,里面設(shè)置了所有對當(dāng)前這個網(wǎng)關(guān)的配置。它會接收所有的客戶端請求,并路由到對應(yīng)的下游服務(wù)器進(jìn)行處理,再將請求結(jié)果返回。而這個上下游請求的對應(yīng)關(guān)系也被稱之為路由。

集成Identity Server

當(dāng)我們涉及到認(rèn)證和鑒權(quán)的時候,我們可以跟Identity Server進(jìn)行結(jié)合。當(dāng)網(wǎng)關(guān)需要請求認(rèn)證信息的時候會與Identity Server服務(wù)器進(jìn)行交互來完成。

網(wǎng)關(guān)集群

只有一個網(wǎng)關(guān)是很危險的,也就是我們通常所講的單點,只要它掛了,所有的服務(wù)全掛。這顯然無法達(dá)到高可用,所以我們也可以部署多臺網(wǎng)關(guān)。當(dāng)然這個時候在多臺網(wǎng)關(guān)前,你還需要一臺負(fù)載均衡器。

Consul?服務(wù)發(fā)現(xiàn)

在Ocelot已經(jīng)支持簡單的負(fù)載功能,也就是當(dāng)下游服務(wù)存在多個結(jié)點的時候,Ocelot能夠承擔(dān)起負(fù)載均衡的作用。但是它不提供健康檢查,服務(wù)的注冊也只能通過手動在配置文件里面添加完成。這不夠靈活并且在一定程度下會有風(fēng)險。這個時候我們就可以用Consul來做服務(wù)發(fā)現(xiàn),它能與Ocelot完美結(jié)合。

【Demo】

  本篇文章為Ocelot入門的第一步要走的步驟,使用Ocelot作為微服務(wù)的網(wǎng)關(guān)

  • Ocelot網(wǎng)關(guān)api的創(chuàng)建

  • 三個下游Demo微服務(wù)接口的創(chuàng)建

  • ?網(wǎng)關(guān)輪詢負(fù)載均衡的演示

  • 【實現(xiàn)過程】

    一、創(chuàng)建下游微服務(wù)

    1.?新建3個asp.net?core?webapi項目,分別命名為Service1,Service2,Service3

    2.?將三個項目的啟動端口分別設(shè)置為39991,39992,39993

    在每個服務(wù)的屬性設(shè)置中將服務(wù)的host端口略作修改,分別叫做39991,39992,39993

    3.?將默認(rèn)的/api/values接口的返回值稍做修改,讓其比較明顯對應(yīng)三個端口

    ?打開默認(rèn)生成的/api/Values控制器Action,改造原來的Get方法返回值,讓其對應(yīng)三個端口以便提高區(qū)分度

    例如Service1:

    Service2和Service3依次修改

    二、Ocelot網(wǎng)關(guān)Api

    1.?新建一個asp.net?core?webapi項目,命名為OcelotGateway

    2.?該項目引入Nuget: Ocelot?最新穩(wěn)定版

    3.?根目錄添加配置文件Ocelot.json,添加上述三個api地址信息

    根目錄下新建一個Jso文件

    內(nèi)容如下(最簡單的配置,采用默認(rèn)路由模板):

    1 {
    2 "ReRoutes": [
    3 {
    4 // - 上游服務(wù)配置
    5 "UpstreamPathTemplate": "/{url}",
    6 "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ],
    7
    8 // - 下游服務(wù)配置
    9 "DownstreamPathTemplate": "/{url}",
    10 "DownstreamScheme": "http",
    11 "DownstreamHostAndPorts": [
    12 {
    13 "Host": "localhost",
    14 "Port": 39991
    15 },
    16 {
    17 "Host": "localhost",
    18 "Port": 39992
    19 },
    20 {
    21 "Host": "localhost",
    22 "Port": 39993
    23 }
    24 ],
    25
    26 // - LoadBalancer將決定負(fù)載均衡的算法,三種取值
    27 // RoundRobin:輪流發(fā)送
    28 // LeastConnection:將請求發(fā)往最空閑的那個服務(wù)器
    29 // NoLoadBalance:總是發(fā)往第一個請求或者是服務(wù)發(fā)現(xiàn)
    30 "LoadBalancerOptions": {
    31 "Type": "RoundRobin"
    32 }
    33 }
    34 ],
    35 "GlobalConfiguration": {
    36 "BaseUrl": "https://api.mybusiness.com"
    37 }
    38 }

    里面指定了相關(guān)配置項:

    • 上游服務(wù)器請求路由模板

    • 下游服務(wù)器轉(zhuǎn)發(fā)時的請求路由模板

    • 下游服務(wù)器的三個相同api的不同地址(模擬負(fù)載均衡)

    • 負(fù)載均衡的策略(輪詢)

    4.?調(diào)整OcelotGateway項目的Programe和Start需要配置的相關(guān)代碼(詳情見代碼)

    ?修改Program.cs文件,引入Ocelot.Json

    改造StartUp.cs文件的配置項,.netcore請求管道內(nèi)加入Ocelot

    三、運行

    1.?先同時運行三個下游微服務(wù),可以看到三個瀏覽器窗口分別返回了三個接口對應(yīng)的返回值

    可以在vs中設(shè)置多啟動項,讓三個服務(wù)同時啟動

    然后我們運行三個服務(wù),可以看到三個瀏覽器窗口分別打開了三個服務(wù),并返回了Demo api的返回值

    三個微服務(wù)啟動成功

    2.?運行OcelotGateway項目,可以看到返回了第一個下游微服務(wù)的返回值

    我們單獨運行OcelotGateway項目

    可以看到Ocelot服務(wù)也被host成功

    并且通過通用模板轉(zhuǎn)發(fā)到了其中一個微服務(wù)上,返回了響應(yīng)值。

    3.?刷新Gateway項目的窗口,可以看到根據(jù)我們配置的輪詢復(fù)雜均衡策略分別輪詢地返回了三個接口的結(jié)果

    ?既然我們配置了輪詢的負(fù)載均衡,那么我們刷新Gateway項目地址看是否會分別請求到三個微服務(wù)上。

    ?Gif版本:

    可以看到,相同的請求被轉(zhuǎn)發(fā)到了不通的api接口上,且是按我們配置的負(fù)載均衡策略順序輪詢轉(zhuǎn)發(fā)

    【項目源碼】

    項目源碼已托管至GitHub:https://github.com/sevenTiny/Demo.Ocelot

    說明:為了更好地展示我們的項目配置是漸進(jìn)性的,我們采用分支策略來展示不同階段的Demo成果,master分支為當(dāng)前所有配置的功能總和

    例如:roadmap-01分支對應(yīng)我們本篇文章的源代碼,對應(yīng)說明文檔 “01-Ocelot極簡單Demo及負(fù)載均衡的配置

    原文地址:https://www.cnblogs.com/7tiny/p/10493805.html

    .NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


    總結(jié)

    以上是生活随笔為你收集整理的Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。