日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

Jimu : .Net Core 分布式微服务框架介绍

發(fā)布時(shí)間:2023/12/4 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jimu : .Net Core 分布式微服务框架介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言

近些年一直浸淫在 .Net 平臺(tái)做企業(yè)應(yīng)用開(kāi)發(fā),用過(guò)的 .Net 框架不多(具體數(shù)量不清,印象深刻的有 Asp.Net MVC,WPF,其他很多都是基于微軟開(kāi)發(fā)的框架做些封裝而形成新的框架,大都是還沒(méi)起好名就湮滅在歷史長(zhǎng)河中),而自己開(kāi)發(fā)的框架倒是不少(5 - 8 套吧), 換框架與換公司成正比(每換一家公司,至少換一套框架),很多都見(jiàn)不得人(當(dāng)時(shí)覺(jué)得高大上,后來(lái)覺(jué)得很low)。 隨波逐流從 winform 年代到現(xiàn)在熱火朝天的微服務(wù),去年冬天看了 surging 項(xiàng)目(另一個(gè)開(kāi)源的 .Net Core 微服務(wù)框架),突然心血來(lái)潮想自己實(shí)現(xiàn)一個(gè)(喜歡重復(fù)造輪子),于是網(wǎng)上閱讀各式各樣的博客、新聞、評(píng)論、代碼,懂了點(diǎn)微服務(wù)的概念,結(jié)合網(wǎng)上開(kāi)源代碼和思想,勉強(qiáng)拼湊出一個(gè)沒(méi)什么特色的微服務(wù)框架 - Jimu (中文名:積木)。

不過(guò)框架的特色就像乳溝,擠擠還是有的:Jimu 是一個(gè)基于.Net Core 2.0 簡(jiǎn)單易用的微服務(wù)框架,使用了大量的開(kāi)源庫(kù), 支持分布式、高并發(fā)和負(fù)載均衡, 實(shí)現(xiàn)了服務(wù)治理和 RPC 調(diào)用。Jimu 在持續(xù)迭代開(kāi)發(fā)中,很多功能還在排期(如可視化監(jiān)控和管理工具,熱更新,服務(wù)熔斷、限流和降級(jí) ...),如非愛(ài)折騰的高手,不建議上生產(chǎn)環(huán)境。正如其中文名 - 積木,希望用她來(lái)開(kāi)發(fā)項(xiàng)目像搭積木一樣簡(jiǎn)單快速可控,使項(xiàng)目安全可靠穩(wěn)定,整體架構(gòu)可拓展、高并發(fā)、分布式。

二、功能技術(shù)

  • 服務(wù)注冊(cè):指定服務(wù)器地址,或通過(guò)擴(kuò)展支持其他應(yīng)用(如 consul - 已支持,redis, zookeeper)

  • 服務(wù)發(fā)現(xiàn):指定服務(wù)器地址,或通過(guò)擴(kuò)展支持其他應(yīng)用(如 consul - 已支持,redis ,zookeeper)

  • 服務(wù)調(diào)用:使用 DotNetty 或 Flurl.Http 實(shí)現(xiàn) RPC 調(diào)用

  • 服務(wù)代理:Microsoft.CodeAnalysis 解析服務(wù)接口生成動(dòng)態(tài)代理

  • 健康監(jiān)測(cè):Quartz.Net 定時(shí)調(diào)度 Socket 任務(wù)檢查服務(wù)器心跳

  • 負(fù)載均衡:輪詢算法(未實(shí)現(xiàn)的有: 加權(quán)輪詢法, 最小連接數(shù)法,隨機(jī)法,加權(quán)隨機(jī)法,源地址哈希法)

  • 授權(quán)認(rèn)證:jose-jwt 實(shí)現(xiàn) JWT 授權(quán)

  • 序 列 化:Json.Net

  • 系統(tǒng)日志:log4net、NLog

三、框架簡(jiǎn)圖

如圖所示,這里有四種角色:

  • Client:各種客戶端, 這是抽象的說(shuō)法,只要訪問(wèn)了 ApiGateway 都屬于客戶端(手機(jī)、電腦 ..., 如果 Service Server1 和 Service Server2 訪問(wèn)了 ApiGateway 也屬于客戶端)

  • ApiGateway: 服務(wù)網(wǎng)關(guān),外部要經(jīng)過(guò)它才可訪問(wèn)內(nèi)部的服務(wù)。網(wǎng)關(guān)是非常重要的一個(gè)角色,他相當(dāng)于外部和內(nèi)部服務(wù)之間的中介,負(fù)責(zé)接受和響應(yīng)外部請(qǐng)求,以及調(diào)用內(nèi)部服務(wù),還有服務(wù)治理等功能

  • Service Discovery Server:負(fù)責(zé)保存已注冊(cè)的服務(wù),相當(dāng)于服務(wù)的花名冊(cè), Service Server 注冊(cè)服務(wù)就是向花名冊(cè)記錄自己的名稱, ApiGateway 發(fā)現(xiàn)服務(wù)就是去花名冊(cè)找有哪些已注冊(cè)的服務(wù)

  • Service Server:這就是微服務(wù),所有業(yè)務(wù)需求都在這里實(shí)現(xiàn)

四、如何使用

服務(wù)注冊(cè)與發(fā)現(xiàn), 已經(jīng)實(shí)現(xiàn)了兩種方式:

  • 不依賴第三方應(yīng)用,直接注冊(cè)到本地服務(wù), 可參看?github 上的 Quick Start

  • 依賴于 consul, 需要先啟動(dòng) consul,然后服務(wù)注冊(cè) consul, ApiGateway 訪問(wèn) consul 發(fā)現(xiàn)服務(wù)

  • 下面用 consul 作為服務(wù)容器,演示怎么用 Jimu 實(shí)現(xiàn)一個(gè)分布式的微服務(wù)

    1. 啟動(dòng) consul

    下載安裝?consul?https://www.consul.io/downloads.html
    啟動(dòng)

    consul agent -dev

    2. 微服務(wù)項(xiàng)目

    創(chuàng)建一個(gè)基于 .Net Core 2.0 的類庫(kù)項(xiàng)目,并添加 jimu 依賴

    Install-Package ?Jimu

    添加服務(wù),引用空間: using Jimu;

    [JimuServiceRoute("api/{Service}")] // RPC 調(diào)用路徑public class UserService : IJimuService{[JimuService(CreatedBy = "grissom")] // 指定服務(wù)的元數(shù)據(jù), 該服務(wù)調(diào)用路徑為 api/user/getname?id=public string GetName(string id) ? ? { ? ? ?
    ? return $"user id {id}, name enjoy!";}}

    3. 微服務(wù)服務(wù)端項(xiàng)目

    創(chuàng)建一個(gè)基于 .Net Core 2.0 的控制臺(tái)項(xiàng)目, 并添加 Jimu.Server 和 Jimu.Common.Discovery.ConsulIntegration 依賴

    Install-Package ?Jimu.Server Install-Package ?Jimu.Common.Discovery.ConsulIntegration

    在 Main 函數(shù)中添加服務(wù)器啟動(dòng)代碼,引用空間: using Jimu.Server;

    static void Main(string[] args){ ?
    ?var hostBuilder = new ServiceHostServerBuilder(new Autofac.ContainerBuilder()).UseLog4netLogger().LoadServices("QuickStart.Services").UseDotNettyForTransfer("127.0.0.1", 8001).UseConsulForDiscovery("127.0.0.1", 8500, "JimuService"); ? ?using (var host = hostBuilder.Build()){host.Run();Console.ReadLine();}}

    4. 微服務(wù)客戶端(ApiGateway)項(xiàng)目

    創(chuàng)建一個(gè)基于 .Net Core 2.0 的 Asp.Net Core Web 應(yīng)用程序(可選擇 API 項(xiàng)目模版),并添加 Jimu.Client 和Jimu.Common.Discovery.ConsulIntegration 依賴

    Install-Package ?Jimu.Client Install-Package ?Jimu.Common.Discovery.ConsulIntegration

    修改 Startup.cs 類的代碼, 以便添加對(duì) jimu 的支持

    using Jimu.Client;
    using Jimu.Client.ApiGateway;
    public class Startup{ ? ? ?
    ? ? ?public Startup(IConfiguration configuration) ? ? ? ?{Configuration = configuration;} ? ? ? ?public IConfiguration Configuration { get; } ? ? ? ?// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services) ? ? ? ?{ ? ? ? ? ? ?//services.AddMvc();services.UseJimu();} ? ? ? ?// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env) ? ? ? ?{ ? ? ? ? ? ?if (env.IsDevelopment()){app.UseDeveloperExceptionPage();} ? ? ? ? ? ?//app.UseMvc();var host = new ServiceHostClientBuilder(new Autofac.ContainerBuilder()).UseLog4netLogger().UsePollingAddressSelector().UseDotNettyForTransfer().UseServerHealthCheck(1).SetDiscoveryAutoUpdateJobInterval(1).UseConsulForDiscovery("127.0.0.1", 8500, "JimuService").Build();app.UseJimu(host);host.Run();}}

    5. 同時(shí)啟動(dòng) 服務(wù)端 和 客戶端

    然后在瀏覽器訪問(wèn):?http://localhost:58156/api/user/getname?id=666

    6. 更多 demo

    更多強(qiáng)悍的功能使用,請(qǐng)自己看 demo 領(lǐng)悟,由于時(shí)間有限,這里就不一一詳解了,如果大家有興趣,日后或者會(huì)有多篇幅和文檔來(lái)介紹。
    請(qǐng)下載?Jimu 源碼, 或者下載項(xiàng)目?jimu.demo

    五、源碼

    請(qǐng)到?github pull 源碼,包含有“巨量” demo

    原文地址:http://www.cnblogs.com/grissom007/p/9291345.html

    .NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com

    總結(jié)

    以上是生活随笔為你收集整理的Jimu : .Net Core 分布式微服务框架介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。