.NET Core 玩一玩 Ocelot API網關

来源:https://www.cnblogs.com/zixuan9527/archive/2018/06/06/9144012.html
-Advertisement-
Play Games

.net 這幾年國內確實不好過。 很多都選擇轉行。不過.net Core跨平臺 開源之後 。社區的生態在慢慢建立。往好的趨勢發展。 對於堅守在.NET戰線的開發者來說 是個挺不錯的消息。 特別是微軟收購75億美金GitHub。.net 生態 社區圈子。肯定會有所上升。 發展趨勢越來越好。(當然 這隻 ...


.net 這幾年國內確實不好過。 很多都選擇轉行。不過.net Core跨平臺 開源之後 。社區的生態在慢慢建立。往好的趨勢發展。 對於堅守在.NET戰線的開發者來說 是個挺不錯的消息。 

特別是微軟收購75億美金GitHub。.net 生態 社區圈子。肯定會有所上升。 發展趨勢越來越好。(當然 這隻是我個人祈願) 

最近也比較懶。也有段時間沒有寫過文章了。  但對於追尋新技術渴望學習 是不會斷的 

最近微服務比較火熱。 將以個大型項目根據業務可以拆分成一個個的較小的獨立項目。便於管理 且互相協作

 

什麼是Ocelot

Ocelot是一個用.NET Core實現並且開源的API網關,它功能強大,包括了:路由、請求聚合、服務發現、認證、鑒權、限流熔斷、並內置了負載均衡器與Service Fabric、Butterfly Tracing集成。這些功能只都只需要簡單的配置即可完成

 

但是現在網上關於Ocelot的文章還是有限。 

首先感謝幾位大佬 Ocelot的文章  

https://www.cnblogs.com/shanyou/p/7787183.html(張友善 大神)

https://www.cnblogs.com/Leo_wl/p/7852311.html HackerVirus 大神)

https://www.cnblogs.com/jesse2013/p/net-core-apigateway-ocelot-docs.html騰飛(Jesse) 大神)

 

首先用VS2017 新建一個 .NET Core Api

 

1.NuGet控制台 安裝Ocelot 

PM> Install-Package Ocelot

 

2.在項目 Startup.cs 修改

這裡需要用到兩個比較重要的命名空間

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

 public Startup(IHostingEnvironment environment)
        {
            var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
            builder.SetBasePath(environment.ContentRootPath)
                   .AddJsonFile("appsettings.json", false, reloadOnChange: true)
                   .AddJsonFile($"appsettings.{environment.EnvironmentName}.json", optional: false, reloadOnChange: true)
                   .AddJsonFile("configuration.json", optional: false, reloadOnChange: true)
                   .AddEnvironmentVariables();


            Configuration = builder.Build();
        }

 

 /// <summary>
        ///配置
        /// </summary>
        public IConfigurationRoot Configuration { get; }

        /// <summary>
        /// 配置服務
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            Action<ConfigurationBuilderCachePart> settings = (x) =>
            {
                x.WithMicrosoftLogging(log =>
                {
                    log.AddConsole(LogLevel.Debug);

                }).WithDictionaryHandle();
            };
            services.AddOcelot(Configuration, settings);
            //services.AddMvc();
        }

 

 /// <summary>
        /// 配置Ocelot
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            //if (env.IsDevelopment())
            //{
            //    app.UseDeveloperExceptionPage();
            //}
            await app.UseOcelot();
            //app.UseMvc();
        }

 

然後是入口程式Main

       public static void Main(string[] args)
        {
            IWebHostBuilder builder = new WebHostBuilder();
            builder.ConfigureServices(s =>
            {
                s.AddSingleton(builder);
            });
            builder.UseKestrel()
                   .UseContentRoot(Directory.GetCurrentDirectory())
                   .UseIISIntegration()
                   .UseStartup<Startup>()
                   .UseApplicationInsights();
            var host = builder.Build();
            host.Run();
        }

 

3. 新建一個命名為configuration的Json 文件

增加配置 如下

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/values",
      "DownstreamScheme": "http",
      "DownstreamHost": "localhost",
      "DownstreamPort": 1001,
      "UpstreamPathTemplate": "/api/values",
      "UpstreamHttpMethod": [ "Get" ],
      "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 3,
        "DurationOfBreak": 10,
        "TimeoutValue": 5000
      },
      "HttpHandlerOptions": {
        "AllowAutoRedirect": false,
        "UseCookieContainer": false
      },
      "AuthenticationOptions": {

      }
    },
    {
      "DownstreamPathTemplate": "/api/product",
      "DownstreamScheme": "http",
      "DownstreamPort": 1002,
      "DownstreamHost": "localhost",
      "UpstreamPathTemplate": "/api/product",
      "UpstreamHttpMethod": [ "Get" ],
      "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 3,
        "DurationOfBreak": 10,
        "TimeoutValue": 5000
      },
      "AuthenticationOptions": {

      }
    }
  ],
  "GlobalConfiguration": {
    "RequestIdKey": "OcRequestId",
    "AdministrationPath": "/admin"
  }
}

 

然後新建兩個APi項目 

並設置他們埠號為1001  1002

 

另一個類似

上面Json配置體現了上游請求和下游服務間的映射關係   上游是客戶端直接調用的URL ,下游,則是對應我們開發的服務。

然後 你可以設置多項目啟動 也可以單獨開啟新實例

 

接下 F5啟動項目

 

 

最後附上Ocelot在GitHub上源碼地址

https://github.com/TomPallister/Ocelot 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天看到一篇文章 Google’s Image Classification Model is now Free to Learn 說是狗狗的機器學習速成課程(Machine Learning Crash Course)現在可以免費學習啦,因為一開始年初的時候是內部使用的,後來開放給大眾了。大家有誰 ...
  • 微軟發佈了.Net Core 2.1正式版,紙殼CMS也在第一時間做了升級,並做了一系列的優化和調整,性能大幅提升,並解決了一些歷史遺留問題,添加了一些新功能。 ...
  • 本質上適合非同步的操作有:HTTP請求,資料庫指令,Web服務調用等。 1、暫停一段時間(以非同步方式)。 以非同步的方式暫停一段時間,這在進行單元測試或者重試延遲時非常有用。 Task類有一個返回Task對象的靜態函數Delay,下麵是其中的一個 一個簡單的指數退避。指數退避是一種重試策略,重試的延遲時 ...
  • SVN 安裝後右鍵出現點擊滑鼠右鍵彈出錯誤提示:CrashHandler initialization error 原因是目標文件夾中缺少SendRpt.exe文件 解決方案:找svn是好的的同事將bin目錄複製替換本地的bin就可以解決 由於沒有找到上傳附件的地方,就沒有上鄙人的bin目錄了,實屬 ...
  • Scenario: 創建了一個WinForm的小程式,希望將它顯示在任務欄,所以在工具欄中的“公共控制項”里,拖入NotifyIcon控制項—notifyIcon1,這個是程式運行任務欄右側通知區域圖標顯示控制項,為控制項notifyIcon的屬性Icon添加一個icon圖標,或從代碼中加入。 Issue: ...
  • 在一些耗時的操作過程中,在長時間運行時可能會導致用戶界面 (UI) 處於停止響應狀態,用戶在這操作期間無法進行其他的操作,為了不使UI層處於停止響應狀態,我們傾向推薦用戶使用BackgroundWorker來進行處理,這個後臺的線程處理,可以很好的實現常規操作的同時,還可以及時通知UI,包括當前處理... ...
  • Select與Select Many 之前在項目中查詢資料庫中的數據,都是通過sql語句來查詢的,但是隨著時代的發展,微軟在.Net Framework 4.5版中推出的一個主要的特性——LINQ。 LINQ是Language Integrate Query的縮寫,意為語言集成查詢。其中有兩種查詢方 ...
  • Restful幾乎已算是API設計的標準,通過HTTP Method區分新增(Create)、查詢(Read)、修改(Update)和刪除(Delete),簡稱CRUD四種數據存取方式,簡約又直接的風格,讓人用的愛不釋手。本篇將介紹如何通過ASP.NET Core實踐REST-Like API。 為 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...