溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)知識(shí)有哪些

發(fā)布時(shí)間:2022-01-05 13:30:18 來(lái)源:億速云 閱讀:150 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“.Net Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)知識(shí)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

網(wǎng)關(guān)是什么

簡(jiǎn)單來(lái)說(shuō),網(wǎng)關(guān)就是暴露給外部的請(qǐng)求入口。就和門衛(wèi)一樣,外面的人想要進(jìn)來(lái),必須要經(jīng)過(guò)門衛(wèi)。當(dāng)然,網(wǎng)關(guān)并不一定是必須的,后端服務(wù)通過(guò)http也可以很好的向客戶端提供服務(wù)。但是對(duì)于業(yè)務(wù)復(fù)雜、規(guī)模龐大的項(xiàng)目來(lái)說(shuō),使用網(wǎng)關(guān)有很多無(wú)法舍棄的好處,比如可以進(jìn)行統(tǒng)一的請(qǐng)求聚合來(lái)節(jié)省流量、降低耦合度,可以賦予項(xiàng)目熔斷限流的能力提高可用性等等。

ocelot是什么

ocelot是.net core實(shí)現(xiàn)的開源的api網(wǎng)關(guān)項(xiàng)目,開源地址:https://github.com/ThreeMammals/Ocelot

ocelot除了十分契合.net開發(fā)者以外,功能強(qiáng)大,包含:路由、認(rèn)證、請(qǐng)求聚合、限流熔斷、服務(wù)發(fā)現(xiàn)、鑒權(quán),還有內(nèi)置負(fù)載均衡器、Consul集成等等。

當(dāng)然了,api網(wǎng)關(guān)不止這一款,市面上還有kong之類的,隨自己喜好就好。

ocelot集成

首先明確一點(diǎn),網(wǎng)關(guān)應(yīng)該作為獨(dú)立進(jìn)程存在。那么我們先新建一個(gè).net core3.1項(xiàng)目,然后添加nuget包:

.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)知識(shí)有哪些

關(guān)于版本,選擇當(dāng)前所能支持的最新版即可。

添加好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();
            //});
        }

這里不要驚訝,因?yàn)樽吡司W(wǎng)關(guān)就不會(huì)再走默認(rèn)的管道了。UseOcelot().Wait() 表示設(shè)置ocelot所有的中間件,而ocelot也提供了很多集成中間件的庫(kù),就像這些:

.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)知識(shí)有哪些

現(xiàn)在,想要讓ocelot成功運(yùn)行,還需要新增配置文件,并在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}", //服務(wù)地址--url變量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "123.123.123.123",
          "Port": 5050 //服務(wù)端口
        }
      ],
      "UpstreamPathTemplate": "/MJ/{url}", //網(wǎng)關(guān)地址--url變量
      "UpstreamHttpMethod": [ "Get", "Post" ]
    }
  ]
}

這是一份簡(jiǎn)單的轉(zhuǎn)發(fā)配置,Downstream和Upstream開頭的配置項(xiàng)就是下游、上游相關(guān)項(xiàng)。這里要說(shuō)一句,在微服務(wù)架構(gòu)中,客戶端&mdash;&mdash;服務(wù)端通常理解為上游&mdash;&mdash;下游,這里自行替換一下。

上面的配置文件做了一件事,接收上游請(qǐng)求時(shí),把請(qǐng)求路徑中含有【/MJ/所有】的請(qǐng)求轉(zhuǎn)發(fā)到IP【http://123.123.123.123:5050/所有】并回傳結(jié)果,支持http的get、post方法,其實(shí)這就是最基本的路由。

來(lái)測(cè)試一下,啟動(dòng)項(xiàng)目并寫好請(qǐng)求路徑:

.Net?Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)知識(shí)有哪些

可以看到,ocelot成功把本地請(qǐng)求按照路由規(guī)則轉(zhuǎn)發(fā)給遠(yuǎn)程服務(wù)器,并回發(fā)了結(jié)果。一個(gè)網(wǎng)關(guān)最基本的功能有了。

截圖中所請(qǐng)求的遠(yuǎn)程服務(wù),是我前幾篇文章基于consul搭建起來(lái)的項(xiàng)目,有興趣可以去看看。

“.Net Core微服務(wù)網(wǎng)關(guān)Ocelot基礎(chǔ)知識(shí)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI