Jimu : .Net Core 分布式微服务框架介绍
一、前言
近些年一直浸淫在 .Net 平臺做企業應用開發,用過的 .Net 框架不多(具體數量不清,印象深刻的有 Asp.Net MVC,WPF,其他很多都是基于微軟開發的框架做些封裝而形成新的框架,大都是還沒起好名就湮滅在歷史長河中),而自己開發的框架倒是不少(5 - 8 套吧), 換框架與換公司成正比(每換一家公司,至少換一套框架),很多都見不得人(當時覺得高大上,后來覺得很low)。 隨波逐流從 winform 年代到現在熱火朝天的微服務,去年冬天看了 surging 項目(另一個開源的 .Net Core 微服務框架),突然心血來潮想自己實現一個(喜歡重復造輪子),于是網上閱讀各式各樣的博客、新聞、評論、代碼,懂了點微服務的概念,結合網上開源代碼和思想,勉強拼湊出一個沒什么特色的微服務框架 - Jimu (中文名:積木)。
不過框架的特色就像乳溝,擠擠還是有的:Jimu 是一個基于.Net Core 2.0 簡單易用的微服務框架,使用了大量的開源庫, 支持分布式、高并發和負載均衡, 實現了服務治理和 RPC 調用。Jimu 在持續迭代開發中,很多功能還在排期(如可視化監控和管理工具,熱更新,服務熔斷、限流和降級 ...),如非愛折騰的高手,不建議上生產環境。正如其中文名 - 積木,希望用她來開發項目像搭積木一樣簡單快速可控,使項目安全可靠穩定,整體架構可拓展、高并發、分布式。
二、功能技術
服務注冊:指定服務器地址,或通過擴展支持其他應用(如 consul - 已支持,redis, zookeeper)
服務發現:指定服務器地址,或通過擴展支持其他應用(如 consul - 已支持,redis ,zookeeper)
服務調用:使用 DotNetty 或 Flurl.Http 實現 RPC 調用
服務代理:Microsoft.CodeAnalysis 解析服務接口生成動態代理
健康監測:Quartz.Net 定時調度 Socket 任務檢查服務器心跳
負載均衡:輪詢算法(未實現的有: 加權輪詢法, 最小連接數法,隨機法,加權隨機法,源地址哈希法)
授權認證:jose-jwt 實現 JWT 授權
序 列 化:Json.Net
系統日志:log4net、NLog
三、框架簡圖
如圖所示,這里有四種角色:
Client:各種客戶端, 這是抽象的說法,只要訪問了 ApiGateway 都屬于客戶端(手機、電腦 ..., 如果 Service Server1 和 Service Server2 訪問了 ApiGateway 也屬于客戶端)
ApiGateway: 服務網關,外部要經過它才可訪問內部的服務。網關是非常重要的一個角色,他相當于外部和內部服務之間的中介,負責接受和響應外部請求,以及調用內部服務,還有服務治理等功能
Service Discovery Server:負責保存已注冊的服務,相當于服務的花名冊, Service Server 注冊服務就是向花名冊記錄自己的名稱, ApiGateway 發現服務就是去花名冊找有哪些已注冊的服務
Service Server:這就是微服務,所有業務需求都在這里實現
四、如何使用
服務注冊與發現, 已經實現了兩種方式:
不依賴第三方應用,直接注冊到本地服務, 可參看?github 上的 Quick Start
依賴于 consul, 需要先啟動 consul,然后服務注冊 consul, ApiGateway 訪問 consul 發現服務
下面用 consul 作為服務容器,演示怎么用 Jimu 實現一個分布式的微服務
1. 啟動 consul
下載安裝?consul?https://www.consul.io/downloads.html
啟動
2. 微服務項目
創建一個基于 .Net Core 2.0 的類庫項目,并添加 jimu 依賴
Install-Package ?Jimu添加服務,引用空間: using Jimu;
[JimuServiceRoute("api/{Service}")] // RPC 調用路徑public class UserService : IJimuService{[JimuService(CreatedBy = "grissom")] // 指定服務的元數據, 該服務調用路徑為 api/user/getname?id=public string GetName(string id) ? ? { ? ? ?? return $"user id {id}, name enjoy!";}}
3. 微服務服務端項目
創建一個基于 .Net Core 2.0 的控制臺項目, 并添加 Jimu.Server 和 Jimu.Common.Discovery.ConsulIntegration 依賴
Install-Package ?Jimu.Server Install-Package ?Jimu.Common.Discovery.ConsulIntegration在 Main 函數中添加服務器啟動代碼,引用空間: 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. 微服務客戶端(ApiGateway)項目
創建一個基于 .Net Core 2.0 的 Asp.Net Core Web 應用程序(可選擇 API 項目模版),并添加 Jimu.Client 和Jimu.Common.Discovery.ConsulIntegration 依賴
Install-Package ?Jimu.Client Install-Package ?Jimu.Common.Discovery.ConsulIntegration修改 Startup.cs 類的代碼, 以便添加對 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. 同時啟動 服務端 和 客戶端
然后在瀏覽器訪問:?http://localhost:58156/api/user/getname?id=666
6. 更多 demo
更多強悍的功能使用,請自己看 demo 領悟,由于時間有限,這里就不一一詳解了,如果大家有興趣,日后或者會有多篇幅和文檔來介紹。
請下載?Jimu 源碼, 或者下載項目?jimu.demo
五、源碼
請到?github pull 源碼,包含有“巨量” demo
原文地址:http://www.cnblogs.com/grissom007/p/9291345.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的Jimu : .Net Core 分布式微服务框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET+PostgreSQL实践与避坑
- 下一篇: .NetCore2.1 WebAPI 根