1、前言
surging受到大家這麼強烈的關注,我感到非常意外,比如有同僚在公司的分享會上分享surging, 還有在部落格拿其它的RPC框架,微服務做對比等等,這些舉動都讓我感覺壓力很大,畢竟作為個人的開源專案,無法與成熟的開源社群的專案相比,也只有等到後面有許許多多志同道合的朋友加入一起研發完善surging,這樣才能讓surging 成為流行的微服務框架。
這篇文章介紹如何使用surging
開源地址:https://github.com/dotnetcore/surging
2、設計模式
Surging 提供了以下四種設計模式
2.1 代理模式
通過代理呼叫不同的微服務。並且針對於規則控制其訪問,如下圖所示:
2.2 非同步訊息模式
再處理等待而阻塞的問題時候, 基於微服務的架構會選擇使用訊息佇列來代替請求/響應模式,如下圖所示:
2.3 鏈式模式
這種模式在接收到請求後會進行互相合並的響應,如下圖所示:
服務A接收到請求後會與服務B進行通訊,服務B會同服務C進行通訊。所有服務之間的通訊使用基於Netty的RPC通訊。
2.4 分支模式
這種模式允許呼叫多個服務提供者,來合併資料進行返回,如下圖所示:
3、外部如何互動
服務主要針對提交的資料進行處理,在單個服務或多個服務呼叫的問題上,採取使用閘道器統一訪問的形式進行處理,如下圖所示
閘道器包括以下功能:
- 安全身份認證
- 統一訪問
- 流量控制
- 分流控制
- 資料監控
- 快取攔截
2.簡單示例
服務端
var host = new ServiceHostBuilder() .RegisterServices(option=> { option.Initialize(); //初始化服務 option.RegisterServices();//依賴注入領域服務 option.RegisterRepositories();//依賴注入倉儲 option.RegisterModules();//依賴注入第三方模組 option.RegisterServiceBus();//依賴注入ServiceBus }) .RegisterServices(builder => { builder.AddMicroService(option => { option.AddServiceRuntime();// // option.UseZooKeeperManager(new ConfigInfo("127.0.0.1:2181")); //使用Zookeeper管理 option.UseConsulManager(new ConfigInfo("127.0.0.1:8500"));//使用Consul管理 option.UseDotNettyTransport();//使用Netty傳輸 option.UseRabbitMQTransport();//使用rabbitmq 傳輸 option.AddRabbitMQAdapt();//基於rabbitmq的消費的服務適配 builder.Register(p => new CPlatformContainer(ServiceLocator.Current));//初始化注入容器 }); }) .SubscribeAt() //訊息訂閱 .UseServer("127.0.0.1", 98) //.UseServer("127.0.0.1", 98,“true”) //自動生成Token //.UseServer("127.0.0.1", 98,“123456789”) //固定密碼Token .UseStartup<Startup>() .Build(); using (host.Run()) { Console.WriteLine($"服務端啟動成功,{DateTime.Now}。"); }
服務路由訪問配置
在介面上,新增以下特性(還未實現統一方法配置)
[ServiceBundle("api/{Service}")]
服務建立代理呼叫 (需要依賴介面建立代理)
ServiceLocator.GetService<IServiceProxyFactory>().CreateProxy<T>(key)
服務根據RoutePath 進行呼叫(不需要依賴介面,耦合性低)
ServiceLocator.GetService<IServiceProxyProvider>().Invoke<string>(model, path, serviceKey)
本地模組和服務呼叫
ServiceLocator.GetService<T>(key)
通過以上配置,可以通過閘道器進行訪問,如果我們要訪問介面IUserService ,方法為GetUser,路由對映的規則[ServiceBundle("api/{Service}/{Method}")],所轉化地址應該是api/User/GetUser,
用Postman測試的效果如下:
4. 總結
surging外部通過Api 閘道器 Rest 訪問,內部通過netty RPC訪問,surging還在不斷完善中,幫助文件也正在趕工中,請大家耐心等待。如感興趣請多關注或者加入QQ群:542283494