1、前言git
surging受到你們這麼強烈的關注,我感到很是意外,好比有同僚在公司的分享會上分享surging, 還有在博客拿其它的RPC框架,微服務作對比等等,這些舉動都讓我感受壓力很大,畢竟做爲我的的開源項目,沒法與成熟的開源社區的項目相比,也只有等到後面有許許多多志同道合的朋友加入一塊兒研發完善surging,這樣才能讓surging 成爲流行的微服務框架。github
這篇文章介紹如何使用surging設計模式
開源地址:https://github.com/dotnetcore/surgingapi
Surging 提供瞭如下四種設計模式緩存
經過代理調用不一樣的微服務。而且針對於規則控制其訪問,以下圖所示:安全
再處理等待而阻塞的問題時候, 基於微服務的架構會選擇使用消息隊列來代替請求/響應模式,以下圖所示:架構
這種模式在接收到請求後會進行互相合並的響應,以下圖所示:框架
服務A接收到請求後會與服務B進行通訊,服務B會同服務C進行通訊。全部服務之間的通訊使用基於Netty的RPC通訊。異步
這種模式容許調用多個服務提供者,來合併數據進行返回,以下圖所示:ide
服務主要針對提交的數據進行處理,在單個服務或多個服務調用的問題上,採起使用網關統一訪問的形式進行處理,以下圖所示
網關包括如下功能:
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)
ServiceLocator.GetService<IServiceProxyProvider>().Invoke<string>(model, path, serviceKey)
ServiceLocator.GetService<T>(key)
經過以上配置,能夠經過網關進行訪問,若是咱們要訪問接口IUserService ,方法爲GetUser,路由映射的規則[ServiceBundle("api/{Service}/{Method}")],所轉化地址應該是api/User/GetUser,
用Postman測試的效果以下:
surging外部經過Api 網關 Rest 訪問,內部經過netty RPC訪問,surging還在不斷完善中,幫助文檔也正在趕工中,請你們耐心等待。如感興趣請多關注或者加入QQ羣:542283494