網站首頁 編程語言 正文
網關是什么
簡單來說,網關就是暴露給外部的請求入口。就和門衛一樣,外面的人想要進來,必須要經過門衛。當然,網關并不一定是必須的,后端服務通過http也可以很好的向客戶端提供服務。但是對于業務復雜、規模龐大的項目來說,使用網關有很多無法舍棄的好處,比如可以進行統一的請求聚合來節省流量、降低耦合度,可以賦予項目熔斷限流的能力提高可用性等等。
ocelot是什么
ocelot是.net core實現的開源的api網關項目,開源地址:https://github.com/ThreeMammals/Ocelot
ocelot除了十分契合.net開發者以外,功能強大,包含:路由、認證、請求聚合、限流熔斷、服務發現、鑒權,還有內置負載均衡器、Consul集成等等。
當然了,api網關不止這一款,市面上還有kong之類的,隨自己喜好就好。
ocelot集成
首先明確一點,網關應該作為獨立進程存在。那么我們先新建一個.net core3.1項目,然后添加nuget包:
關于版本,選擇當前所能支持的最新版即可。
添加好nuget包以后,需要修改StartUp:
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddOcelot(); //services.AddControllers(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseOcelot().Wait(); //if (env.IsDevelopment()) //{ // app.UseDeveloperExceptionPage(); //} //app.UseHttpsRedirection(); //app.UseRouting(); //app.UseAuthorization(); //app.UseEndpoints(endpoints => //{ // endpoints.MapControllers(); //}); }
這里不要驚訝,因為走了網關就不會再走默認的管道了。UseOcelot().Wait() 表示設置ocelot所有的中間件,而ocelot也提供了很多集成中間件的庫,就像這些:
現在,想要讓ocelot成功運行,還需要新增配置文件,并在Program新增配置文件的引用:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration(config => { config.AddJsonFile("ocelotConfig.json", optional: false, reloadOnChange: true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
配置文件:
{ "Routes": [ { "DownstreamPathTemplate": "/{url}", //服務地址--url變量 "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "123.123.123.123", "Port": 5050 //服務端口 } ], "UpstreamPathTemplate": "/MJ/{url}", //網關地址--url變量 "UpstreamHttpMethod": [ "Get", "Post" ] } ] }
這是一份簡單的轉發配置,Downstream和Upstream開頭的配置項就是下游、上游相關項。這里要說一句,在微服務架構中,客戶端——服務端通常理解為上游——下游,這里自行替換一下。
上面的配置文件做了一件事,接收上游請求時,把請求路徑中含有【/MJ/所有】的請求轉發到IP【http://123.123.123.123:5050/所有】并回傳結果,支持http的get、post方法,其實這就是最基本的路由。
來測試一下,啟動項目并寫好請求路徑:
可以看到,ocelot成功把本地請求按照路由規則轉發給遠程服務器,并回發了結果。一個網關最基本的功能有了。
截圖中所請求的遠程服務,是我前幾篇文章基于consul搭建起來的項目,有興趣可以去看看。
關于ocelot更高級的應用,比如熔斷限流、身份認證等,都是通過配置來完成的,我會整理后發出來,同時也建議仔細閱讀官方文檔,地址:https://ocelot.readthedocs.io/en/latest/
原文鏈接:https://www.cnblogs.com/muchengqingxin/p/15516270.html
相關推薦
- 2022-09-22 git-lfs 離線安裝
- 2022-12-07 Golang源碼分析之golang/sync之singleflight_Golang
- 2022-08-16 C語言詳細分析浮點數在內存中的儲存_C 語言
- 2022-09-10 golang之數組切片的具體用法_Golang
- 2022-06-12 C語言棧與隊列相互實現詳解_C 語言
- 2024-01-30 MongoDB 聚合查詢在數據統計中的應用
- 2022-04-09 python多線程互斥鎖與死鎖問題詳解_python
- 2022-07-08 Nginx將http轉換成https的詳細過程_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支