分享一個集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的入門級微服務開發框架

来源:https://www.cnblogs.com/peyshine/archive/2020/05/11/12869700.html
-Advertisement-
Play Games

集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服務開發框架 Github源代碼地址 https://github.com/PeyShine/Demo.MicroServer Apollo配置 ...


集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服務開發框架

Github源代碼地址

https://github.com/PeyShine/Demo.MicroServer

Apollo配置中心

Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改後能夠實時推送到應用端,並且具備規範的許可權、流程治理等特性,適用於微服務配置管理場景。 由於各個項目配置都需要讀取基礎的配置信息,這邊在內網的Centos(101)上部署了Apollo的環境,併為項目添加了一些基礎配置信息,配置如圖 

Consul

Consul是一種服務網格解決方案,提供具有服務發現,健康檢查,Key/Value存儲,多數據中心等功能。 在內網101啟動Consul服務,這裡為了測試,直接在本地將用戶服務實例分別在三個埠啟動起來,實際生產中這些服務可能部署在不同的機房不同的機器,他們之間組成一個服務的集群,服務提供一個心跳檢測的方法,用於consul定時檢測服務實例是否健康,啟動時在consul中進行一次註冊,這個就是經常說的‘服務註冊與發現’中的服務註冊,三個服務實例截圖如下 
註冊完成之後打開consul的ui界面可以看到,列表中存在多出一個用戶服務的集群組名稱:Demo.MicroServer.UserService,如圖 
點擊Demo.MicroServer.UserService進去之後如圖,顯示三個服務實例的信息 

Swagger

Swagger提供了一個可視化的UI頁面展示描述文件。介面的調用方、測試等都可以在該頁面中對相關介面進行查閱和做一些簡單的介面請求。當然Swagger的功能遠不止這些,項目中已經在服務實例中接入swagger,如圖 


因為三個服務實例是同樣一份代碼,所以可以看到打開三個埠的swagger地址,看到的介面信息完全一致。

Ocelot 網關

Ocelot是一個.NET API網關,它提供了路由,請求聚合,服務發現、鑒權、限流熔斷、負載均衡器等一系列強大的功能,而這些功能只需要在配置文件中完成即可使用. 比如上面的swagger,我們在三個服務實例的埠打開都可以看到api相關文檔信息,但是我們能否在api網關中直接集成呢,答案是肯定的,這依賴於ocelot強大的路由功能,如圖,簡單的幾行配置,我們便將swagger配置到了網關當中 

網關內置的負載均衡器的使用,如圖我在網關中對同一個介面進行了三次調用,可以看到結果分別來自三個不同的埠中,因為我選用了負載均衡器中的輪詢策略 

限流策略,當我們配置啟用限流策略,並配置單位時間內訪問次數限制時,然後快速刷新介面,超過設置的次數限制,那麼可以看到按照錯誤提示出現 

Expectationless

Exceptionless 是一個開源的實時的日誌收集框架,相信在微服務架構或者分散式應用應該都離不開一個統一的日誌收集功能,Exceptionless就是就很好的提供了服務,相信有很多開發者都在使用ELK來完成日誌的收集,這裡說下Exceptionless底層也是基於ElasticSearch, Exceptionless提供了兩種服務方式,一種是線上的,就是直接在官網註冊賬戶,新建項目,官方會給每個項目分配一個appid,將id配置到項目中即可使用,當然,線上使用是有限制的,對日誌收集數量(3000)還有存儲時間天數(3天)都有限制,測試或者臨時使用應該都沒問題, 考慮到後面項目會在生產環境中使用,所以我在內網centos上搭建了一個本地化的Exceptionless環境來收集日誌。 我這裡調用一下swagger中寫的一個異常收集測試的介面 
發送完成後,到Exceptionless的ui界面來查看收集情況 
可以看到界面多出一條發送測試的數據記錄

IdentityServer4統一鑒權中心

之所有將認證授權放在最後,因為沒有這個前面的流程也是可以跑通的,測試的時候如果覺得這部分測試麻煩可以先註釋掉,流程跑通後再來集成這個,這個東西的用法還是很多的,這裡將IdentityServer4集成到api 網關當中來完成統一的認證鑒權。 在identityserver4項目中分別實現以下幾個類 
分類來完全幾個東西:定義api資源,客戶端訪問資源範圍,校驗賬戶密碼過程和數據返回格式 然後在api網關中項目中統一認證,這裡需要說明下為什麼要將IdentityServer4集成到網關當中而不是在每個服務實例單獨去認證,想象一下,如果在一個大型項目中,不同的小組維護著不同的服務實例,勢必每個小組都要在各自的代碼中完成一套認證邏輯,確實沒有必要, 而Ocelot天然對IdentityServer4進行了很好的集成,我們只需要在網關中統一添加認證代碼即可,而各個微服務實例只需要關心各自的業務邏輯代碼即可。 這個也列舉一下使用過程,在客戶端沒有token時通過網關對api資源進行訪問,可以看到如圖的返回狀態碼:401 
然後我們到IdentityServer4中請求一個token 
拿到token後,帶著token再通過網關請求相同的api資源,可以看到正確拿到想要的資源。 

特別說明

上面的所有說明,在代碼中均有體現,並開放出來,但是對於一個完整的微服務架構來說還是太簡略,只是做了簡單的說明,後續會具體拆開來分享一下。 至於為什麼要這麼做和工具的安裝,博客園等地方有很多這方面的對比和教程可以參考,這裡著重關註微服務架構的實現
歡迎大家提出寶貴意見,當然如果對你有幫助也歡迎star.
隨時隨地查閱可關註公眾號

後續更新

後續可能還會加入CAP和APM


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

-Advertisement-
Play Games
更多相關文章
  • 面試的時候,很多人都小心翼翼,如履薄冰,生怕自己說錯一句話,就錯失機會,擔心,面試緊張、卡殼、答不上來怎麼辦? 被面試官弔打,碾壓,是常態,畢竟大多數面試官工作經驗和技術都更加豐富嘛。 但是,術業有專攻,總有一些技術牛逼的程式員可以弔打、碾壓面試官! 本人經常隔段時間就偷偷投點簡歷,請假出去面試幾次 ...
  • 一個小伙伴最近參加某一線互聯網公司的面試,被問到了一些併發相關的問題,看看大家能否答出來: (1)synchronized的CPU原語級別是如何實現的? (2)無鎖、偏向鎖、輕量級鎖、重量級鎖有什麼差別,升級過程如何? (3)線程間通信,同機器進程間通信,跨機器進程間通信,各有什麼方法? (4)下列 ...
  • 先扯些這些內容: TCP/IP TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 在應用層有: TCP包括FTP、HTTP、TELNET、SMTP等協議 UDP包括DN ...
  • 1.學前知識 1.1視頻碼率值 碼率公式: 碼率(kbps)=文件大度小(KB)*8/時間(秒) 所以碼率和視頻文件大小成正比的,不過碼率超過一定值後,人眼是看不出效果的. 接下來,我們便先來學習ffmpeg命令使用 2.ffmpeg常用命令使用 ffmpeg命令- 用於轉碼的應用程式, 也可以從u ...
  • Python 問世至今已經三十年左右了,但其僅在過去幾年人氣迅速飆升超過了除 java 和 C 以外的其他語言。總的來說,Python 已經成為教學、學習編程和軟體開發的優秀起點,而且其可以成為任何技術棧中有價值的一部分。 另外大家要註意:光理論是不夠的。這裡順便總大家一套2020最新python入 ...
  • FAE parse : 一成不變 FAE Value : interp的最終轉讓值 numV: value closureV: param FAE(或value,或function) pair list DefrdSub : 傳達environment 以前WAE中使用的DefrdSub只用於wit ...
  • 一、基礎知識 1.1、簡介 Log4Net是一個開源日誌框架,它的功能很強大,可以將日誌分為不同的等級,以不同的格式輸出到不同的存儲介質中,比如:資料庫、txt文件、記憶體緩衝區、郵件、控制台、ANSI終端、遠程接收端等等。 Log4Net將日誌分為五個級別,從高到低分別是:FATAL(致命錯誤)、E ...
  • 視頻:https://www.bilibili.com/video/BV15x411x7WN?p=6 功能點:表格分組,彙總。 結果圖: 操作步驟: 分組實現:設置GroupIndex 表格分數彙總:設置GridView的ShowFooter=true。設置分數列的彙總方式。 在分組裡實現彙總功能: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...