<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PeyShine.MicroService.NET 微服務(wù)開(kāi)發(fā)框架

          聯(lián)合創(chuàng)作 · 2023-09-28 05:04

          集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服務(wù)開(kāi)發(fā)框架

          Apollo配置中心 Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。 由于各個(gè)項(xiàng)目配置都需要讀取基礎(chǔ)的配置信息,這邊在內(nèi)網(wǎng)的Centos(101)上部署了Apollo的環(huán)境,并為項(xiàng)目添加了一些基礎(chǔ)配置信息,配置如圖

          Consul Consul是一種服務(wù)網(wǎng)格解決方案,提供具有服務(wù)發(fā)現(xiàn),健康檢查,Key/Value存儲(chǔ),多數(shù)據(jù)中心等功能。 在內(nèi)網(wǎng)101啟動(dòng)Consul服務(wù),這里為了測(cè)試,直接在本地將用戶服務(wù)實(shí)例分別在三個(gè)端口啟動(dòng)起來(lái),實(shí)際生產(chǎn)中這些服務(wù)可能部署在不同的機(jī)房不同的機(jī)器,他們之間組成一個(gè)服務(wù)的集群,服務(wù)提供一個(gè)心跳檢測(cè)的方法,用于consul定時(shí)檢測(cè)服務(wù)實(shí)例是否健康,啟動(dòng)時(shí)在consul中進(jìn)行一次注冊(cè),這個(gè)就是經(jīng)常說(shuō)的‘服務(wù)注冊(cè)與發(fā)現(xiàn)’中的服務(wù)注冊(cè),三個(gè)服務(wù)實(shí)例截圖如下

          注冊(cè)完成之后打開(kāi)consul的ui界面可以看到,列表中存在多出一個(gè)用戶服務(wù)的集群組名稱:Demo.MicroServer.UserService,如圖

          點(diǎn)擊Demo.MicroServer.UserService進(jìn)去之后如圖,顯示三個(gè)服務(wù)實(shí)例的信息

          Swagger Swagger提供了一個(gè)可視化的UI頁(yè)面展示描述文件。接口的調(diào)用方、測(cè)試等都可以在該頁(yè)面中對(duì)相關(guān)接口進(jìn)行查閱和做一些簡(jiǎn)單的接口請(qǐng)求。當(dāng)然Swagger的功能遠(yuǎn)不止這些,項(xiàng)目中已經(jīng)在服務(wù)實(shí)例中接入swagger,如圖

          因?yàn)槿齻€(gè)服務(wù)實(shí)例是同樣一份代碼,所以可以看到打開(kāi)三個(gè)端口的swagger地址,看到的接口信息完全一致。

          Ocelot 網(wǎng)關(guān) Ocelot是一個(gè).NET API網(wǎng)關(guān),它提供了路由,請(qǐng)求聚合,服務(wù)發(fā)現(xiàn)、鑒權(quán)、限流熔斷、負(fù)載均衡器等一系列強(qiáng)大的功能,而這些功能只需要在配置文件中完成即可使用. 比如上面的swagger,我們?cè)谌齻€(gè)服務(wù)實(shí)例的端口打開(kāi)都可以看到api相關(guān)文檔信息,但是我們能否在api網(wǎng)關(guān)中直接集成呢,答案是肯定的,這依賴于ocelot強(qiáng)大的路由功能,如圖,簡(jiǎn)單的幾行配置,我們便將swagger配置到了網(wǎng)關(guān)當(dāng)中

          網(wǎng)關(guān)內(nèi)置的負(fù)載均衡器的使用,如圖我在網(wǎng)關(guān)中對(duì)同一個(gè)接口進(jìn)行了三次調(diào)用,可以看到結(jié)果分別來(lái)自三個(gè)不同的端口中,因?yàn)槲疫x用了負(fù)載均衡器中的輪詢策略

          限流策略,當(dāng)我們配置啟用限流策略,并配置單位時(shí)間內(nèi)訪問(wèn)次數(shù)限制時(shí),然后快速刷新接口,超過(guò)設(shè)置的次數(shù)限制,那么可以看到按照錯(cuò)誤提示出現(xiàn)

          Expectationless Exceptionless 是一個(gè)開(kāi)源的實(shí)時(shí)的日志收集框架,相信在微服務(wù)架構(gòu)或者分布式應(yīng)用應(yīng)該都離不開(kāi)一個(gè)統(tǒng)一的日志收集功能,Exceptionless就是就很好的提供了服務(wù),相信有很多開(kāi)發(fā)者都在使用ELK來(lái)完成日志的收集,這里說(shuō)下Exceptionless底層也是基于ElasticSearch, Exceptionless提供了兩種服務(wù)方式,一種是在線的,就是直接在官網(wǎng)注冊(cè)賬戶,新建項(xiàng)目,官方會(huì)給每個(gè)項(xiàng)目分配一個(gè)appid,將id配置到項(xiàng)目中即可使用,當(dāng)然,在線使用是有限制的,對(duì)日志收集數(shù)量(3000)還有存儲(chǔ)時(shí)間天數(shù)(3天)都有限制,測(cè)試或者臨時(shí)使用應(yīng)該都沒(méi)問(wèn)題, 考慮到后面項(xiàng)目會(huì)在生產(chǎn)環(huán)境中使用,所以我在內(nèi)網(wǎng)centos上搭建了一個(gè)本地化的Exceptionless環(huán)境來(lái)收集日志。 我這里調(diào)用一下swagger中寫的一個(gè)異常收集測(cè)試的接口

          發(fā)送完成后,到Exceptionless的ui界面來(lái)查看收集情況 可以看到界面多出一條發(fā)送測(cè)試的數(shù)據(jù)記錄

          IdentityServer4統(tǒng)一鑒權(quán)中心 之所有將認(rèn)證授權(quán)放在最后,因?yàn)闆](méi)有這個(gè)前面的流程也是可以跑通的,測(cè)試的時(shí)候如果覺(jué)得這部分測(cè)試麻煩可以先注釋掉,流程跑通后再來(lái)集成這個(gè),這個(gè)東西的用法還是很多的,這里將IdentityServer4集成到api 網(wǎng)關(guān)當(dāng)中來(lái)完成統(tǒng)一的認(rèn)證鑒權(quán)。 在identityserver4項(xiàng)目中分別實(shí)現(xiàn)以下幾個(gè)類

          分類來(lái)完全幾個(gè)東西:定義api資源,客戶端訪問(wèn)資源范圍,校驗(yàn)賬戶密碼過(guò)程和數(shù)據(jù)返回格式 然后在api網(wǎng)關(guān)中項(xiàng)目中統(tǒng)一認(rèn)證,這里需要說(shuō)明下為什么要將IdentityServer4集成到網(wǎng)關(guān)當(dāng)中而不是在每個(gè)服務(wù)實(shí)例單獨(dú)去認(rèn)證,想象一下,如果在一個(gè)大型項(xiàng)目中,不同的小組維護(hù)著不同的服務(wù)實(shí)例,勢(shì)必每個(gè)小組都要在各自的代碼中完成一套認(rèn)證邏輯,確實(shí)沒(méi)有必要, 而Ocelot天然對(duì)IdentityServer4進(jìn)行了很好的集成,我們只需要在網(wǎng)關(guān)中統(tǒng)一添加認(rèn)證代碼即可,而各個(gè)微服務(wù)實(shí)例只需要關(guān)心各自的業(yè)務(wù)邏輯代碼即可。 這個(gè)也列舉一下使用過(guò)程,在客戶端沒(méi)有token時(shí)通過(guò)網(wǎng)關(guān)對(duì)api資源進(jìn)行訪問(wèn),可以看到如圖的返回狀態(tài)碼:401

          然后我們到IdentityServer4中請(qǐng)求一個(gè)token

          拿到token后,帶著token再通過(guò)網(wǎng)關(guān)請(qǐng)求相同的api資源,可以看到正確拿到想要的資源。

          瀏覽 24
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日日骚影视| 欧美A片免费 | 99九九99九九九99九他書對 | 豆花成人版视频WWW18 | 在线免费看h |