基於.NET CORE微服務框架 -淺析如何使用surging

1、前言git

      surging受到你們這麼強烈的關注,我感到很是意外,好比有同僚在公司的分享會上分享surging, 還有在博客拿其它的RPC框架,微服務作對比等等,這些舉動都讓我感受壓力很大,畢竟做爲我的的開源項目,沒法與成熟的開源社區的項目相比,也只有等到後面有許許多多志同道合的朋友加入一塊兒研發完善surging,這樣才能讓surging 成爲流行的微服務框架。github

這篇文章介紹如何使用surging設計模式

 

開源地址:https://github.com/dotnetcore/surgingapi

2、設計模式

Surging 提供瞭如下四種設計模式緩存

2.1  代理模式

經過代理調用不一樣的微服務。而且針對於規則控制其訪問,以下圖所示:安全

 

2.2 異步消息模式

再處理等待而阻塞的問題時候, 基於微服務的架構會選擇使用消息隊列來代替請求/響應模式,以下圖所示:架構

 

2.3 鏈式模式

這種模式在接收到請求後會進行互相合並的響應,以下圖所示:框架

服務A接收到請求後會與服務B進行通訊,服務B會同服務C進行通訊。全部服務之間的通訊使用基於Netty的RPC通訊。異步

 

2.4  分支模式

這種模式容許調用多個服務提供者,來合併數據進行返回,以下圖所示:ide

 

3、外部如何交互

服務主要針對提交的數據進行處理,在單個服務或多個服務調用的問題上,採起使用網關統一訪問的形式進行處理,以下圖所示

 

網關包括如下功能:

  1. 安全身份認證
  2. 統一訪問
  3. 流量控制
  4. 分流控制
  5. 數據監控
  6. 緩存攔截

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

相關文章
相關標籤/搜索