公司去年開始使用dotnet core開發項目。公司的整體架構採用的是微服務,那時候因爲對微服務的理解並非太深,加上各類組件的不成熟,只是把項目的各個功能經過業務層面拆分,而後經過nginx代理,項目最終上線。可是這遠遠沒達到微服務的要求,其中服務治理,斷路器都沒有。我我的理解,咱們談微服務實際上更多的是談服務治理這塊東西,至於各個的服務只是微服務中的應用而已。一次偶然的機會發現了java的spring cloud這套框架,並且支持dotnet core集成(Steeltoe OSS)。因此目前咱們的項目架構是spring cloud搭建底層微服務框架,dotnet core來編寫業務邏輯。html
spring cloud是java平臺提供的一套解決方案,目前市面上來講可能不是最好的微服務解決方案,可是必定是功能最齊全最全的解決方案。提供了一些微服務的基礎功能,包括服務治理、負載均衡、斷路器、配置中心、API網關等等。java
關於服務治理這塊東西,網上太多太多的資料和原理。相信你們也看了不少,可是如何應用到實際的項目場景,爲何要這樣作呢?傳統的項目,服務與服務之間的調用都是經過URL來訪問,若是是集羣那麼經過一個負載均衡地址來訪問,增長或者減小機器都是經過維護負載均衡列表的IP地址來實現。微服務架構下,分散成了N個服務,每一個服務又是一個集羣,對於一個大項目來講,維護這些配置是很是頭疼的。筆者曾經在某知名互聯網公司工做過,公司最累最背鍋的就是運維團隊,基本24小時都在應付各個團隊的部署上線工做以及各類配置的維護,並且還常常出錯捱罵。那麼服務治理就出如今這種應用場景之中,運維工程師不用再維護各個負載均衡節點,由服務中心去統一處理。舉個簡單例子,一個電商網站,分解成N個服務,其中有一個用戶服務,有一個訂單服務,用戶服務須要調用訂單服務,而訂單服務是一個集羣,對於用戶中心來講他只須要知道訪問訂單中心便可,至於具體訪問訂單中心的哪臺機器由服務中心來調配。nginx
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
@EnableEurekaServer @SpringBootApplication public class ServiceCenterApplication {}
spring.application.name=service-center server.port=5000
<PackageReference Include="Pivotal.Discovery.Client" Version="1.1.0" />
3.Program.cs 設置一個端口git
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .UseUrls("http://*:8010") .Build(); host.Run(); }
public void ConfigureServices(IServiceCollection services) { services.AddDiscoveryClient(Configuration); // Add framework services. services.AddMvc(); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseMvc(); app.UseDiscoveryClient(); }
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "spring": { "application": { "name": "serviceone" } }, "eureka": { "client": { "serviceUrl": "http://localhost:5000/eureka/", "shouldFetchRegistry": false, "shouldRegisterWithEureka": true }, "instance": { "port": 8010 } } }
若是是團隊開發,"shouldRegisterWithEureka"設置成false,防止本地環境註冊到開發環境github
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .UseUrls("http://*:8011") .Build(); host.Run();
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "spring": { "application": { "name": "servicetwo" } }, "eureka": { "client": { "serviceUrl": "http://loclhost:5000/eureka/", "shouldFetchRegistry": false, "shouldRegisterWithEureka": true }, "instance": { "port": 8011 } } }
這樣一個簡單的服務治理平臺就搭建出來了,咱們經過spring cloud來建立了一個服務中心,而後經過dotnet core建立了2個服務註冊到了服務中心,可是這些離微服務還差的遠.服務之間怎麼相互調用呢?集羣模式怎麼處理呢?微服務的統一API網關呢?留下這些問題,且聽下回分解。
第二篇文章已經發布。spring cloud+dotnet core搭建微服務架構:服務發現(二)web
全部代碼均上傳github。代碼按照章節的順序上傳,例如第一章demo1,第二章demo2以此類推。
求推薦,大家的支持是我寫做最大的動力,個人QQ羣:328438252,交流微服務。spring
java部分json
.net部分api