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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.net core ocelot 获取路由的mothed_Net Core微服务入门全纪录(四)Ocelot网关(上)

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net core ocelot 获取路由的mothed_Net Core微服务入门全纪录(四)Ocelot网关(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇【.Net Core微服務入門全紀錄(三)——Consul-服務注冊與發現(下)】已經使用Consul完成了服務的注冊與發現,實際中光有服務注冊與發現往往是不夠的,我們需要一個統一的入口來連接客戶端與服務。

Ocelot

官網:https://ocelot.readthedocs.io/
Ocelot正是為.Net微服務體系提供一個統一的入口點,稱為:Gateway(網關)。

  • 上手Ocelot:

首先創建一個空的asp.net core web項目。


注意ocelot.json是我們添加的Ocelot的配置文件,記得設置生成時復制到輸出目錄。ocelot.json的文件名不是固定的,可以自己定義。

NuGet安裝一下Ocelot:

只需簡單的修改幾處默認代碼:
Program.cs:

public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("ocelot.json"); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); }

Startup.cs:

public class Startup { // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { //添加ocelot服務 services.AddOcelot(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //設置Ocelot中間件 app.UseOcelot().Wait(); } }

ocelot.json:

{ "Routes": [ { "DownstreamPathTemplate": "/products", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9050 }, { "Host": "localhost", "Port": 9051 }, { "Host": "localhost", "Port": 9052 } ], "UpstreamPathTemplate": "/products", "UpstreamHttpMethod": [ "Get" ], "LoadBalancerOptions": { "Type": "RoundRobin" //負載均衡,輪詢機制 LeastConnection/RoundRobin/NoLoadBalancer/CookieStickySessions } }, { "DownstreamPathTemplate": "/orders", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9060 }, { "Host": "localhost", "Port": 9061 }, { "Host": "localhost", "Port": 9062 } ], "UpstreamPathTemplate": "/orders", "UpstreamHttpMethod": [ "Get" ], "LoadBalancerOptions": { "Type": "RoundRobin" //負載均衡,輪詢機制 LeastConnection/RoundRobin/NoLoadBalancer/CookieStickySessions } } ], "GlobalConfiguration": { "BaseUrl": "http://localhost:9070" }}

我們先暫時忽略Consul,將服務實例的地址都寫在配置文件中。要知道Consul、Ocelot等組件都是可以獨立存在的。
配置文件中的Routes節點用來配置路由,Downstream代表下游,也就是服務實例,Upstream代表上游,也就是客戶端。我們的路徑比較簡單,只有/products、/orders,路徑中如果有不固定參數則使用{}匹配。我們這個配置的意思呢就是客戶端訪問網關的/orders、/products,網關會轉發給服務實例的/orders、/products,注意這個上游的路徑不一定要和下游一致,比如上游路徑可以配置成/api/orders,/xxx都可以。
LoadBalancerOptions節點用來配置負載均衡,Ocelot內置了 LeastConnection、RoundRobin、NoLoadBalancer、CookieStickySessions 4種負載均衡策略。
BaseUrl節點就是配置我們ocelot網關將要運行的地址。

  • 運行gateway:

目前不考慮網關集群,就不放在docker里了。直接控制臺執行:`dotnet Ocelot.APIGateway.dll --urls="http://*:9070"

用瀏覽器測試一下:


測試正常,我們通過網關可以正常的訪問到服務實例。

  • 接下來繼續改造客戶端代碼:


因為改動太多就直接新建一個GatewayServiceHelper來做。
GatewayServiceHelper:

/// /// 通過gateway調用服務 /// public class GatewayServiceHelper : IServiceHelper { public async Task GetOrder() { var Client = new RestClient("http://localhost:9070"); var request = new RestRequest("/orders", Method.GET); var response = await Client.ExecuteAsync(request); return response.Content; } public async Task GetProduct() { var Client = new RestClient("http://localhost:9070"); var request = new RestRequest("/products", Method.GET); var response = await Client.ExecuteAsync(request); return response.Content; } public void GetServices() { throw new NotImplementedException(); } }

然后在Startup中修改一下注入的類型,別的就不用改了,這就是依賴注入的好處之一。。。
Startup.ConfigureServices():

//注入IServiceHelper//services.AddSingleton(); //注入IServiceHelperservices.AddSingleton();

Startup.Configure():

//程序啟動時 獲取服務列表//serviceHelper.GetServices();

運行客戶端測試:

好了,現在客戶端對服務的調用都通過網關進行中轉,客戶端再也不用去關心那一堆服務實例的地址,只需要知道網關地址就可以了。另外,服務端也避免了服務地址直接暴露給客戶端。這樣做對客戶端,服務都非常友好。

至于我們的api網關呢,又要說到服務發現的問題了。目前我們的服務地址是寫在ocelot.json配置文件里的,當然這種做法在服務實例不經常變化的情況下是沒有問題的,一旦服務變化,需要人為的修改配置文件,這又顯得不太合理了。

當然,強大的Ocelot為我們提供了服務發現的方案。

代碼放在:https://github.com/xiajingren/NetCoreMicroserviceDemo

總結

以上是生活随笔為你收集整理的.net core ocelot 获取路由的mothed_Net Core微服务入门全纪录(四)Ocelot网关(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 三级成人在线 | fexx性欧美 | 日韩视频免费 | 欧美日韩电影一区二区三区 | 四虎av| 成人视品 | 久久午夜福利电影 | 成人福利一区二区 | 欧洲av无码放荡人妇网站 | 日韩诱惑 | 精品人妻无码专区视频 | 国产免费黄色录像 | 超91在线| 穿情趣内衣被c到高潮视频 欧美性猛交xxxx黑人猛交 | 黄黄的视频在线观看 | 泽村玲子在线 | 亚洲天堂视频网 | 日本不卡影院 | 午夜激情电影在线观看 | 全程粗话对白视频videos | 免费在线观看毛片视频 | 国产精品三区在线观看 | 男女在线观看视频 | 成人午夜影视 | 狠狠干狠狠操 | 黄色在线一区 | 中文字幕在线观看视频一区 | 人妻换人妻a片爽麻豆 | 欧美视频一区二区在线 | 亚洲欧洲av | 国产精品1234 | 孕期1ⅴ1高h | 免费毛片观看 | 老司机午夜影院 | 一区二区三区视频免费在线观看 | 中国国产黄色片 | 精品久久二区 | 色女人天堂 | 国产精品美女www爽爽爽 | 免费无码国产精品 | 干综合网 | 久久国 | 午夜精品亚洲 | 一级片在线免费播放 | 青青青免费在线 | 美女搡bbb又爽又猛又黄www | 欧美影院在线 | 婷婷在线视频观看 | 成人三级在线看 | 艹少妇视频 | 毛片在线网址 | 黄色正能量网站 | 国产11页 | 人人射人人爱 | 欧美综合影院 | 亚洲情se| 宅男av在线 | 国产免费看片 | 性猛交富婆╳xxx乱大交天津 | 一区二区在线观看免费视频 | 亚洲毛片一区二区三区 | 黄色网址在线免费 | 国产精品老熟女视频一区二区 | 91视频一区二区三区 | 亚洲国产一区二区三区 | 亚洲天堂第一区 | 91亚洲免费 | 免费成人美女在线观看. | 久久精品国产免费看久久精品 | 小优视频污 | 国产成人无码一区二区在线播放 | 99中文字幕| 欧美在线观看视频 | 日韩成人av一区 | 日韩欧美视频二区 | 人人操在线播放 | 蜜桃成人无码区免费视频网站 | 国产视频一二三四区 | 生活片一级片 | 国产精品综合久久 | 亚洲精品www久久久久久广东 | 不卡的毛片 | 国产欧美成人 | 日韩精品免费一区二区三区 | 美女视频黄免费 | 97人人超 | 尤物在线视频 | 操操干干 | av在线影片 | 久久久久18 | 老熟女毛茸茸浓毛 | 香蕉视频在线观看黄 | 少妇久久精品 | 91传媒理伦片在线观看 | 91免费视 | 91在线国产观看 | 啦啦啦免费高清视频在线观看 | 天天天天色 | 全黄一级裸体片 |