微服務裡一個重要的概念就是服務註冊與發現技術,當你有一個新的服務執行後,我們的服務中心可以感知你,然後把加新增到服務列表裡,然後當你死掉後,會從服務中心把你移除,而你作為一個服務,對其它服務公開的只是服務名稱,而不是最終的服務地址URL,這對於雲平臺,容器化架構來說是非常重要的!
- 安裝單獨的Eureka服務(server)
- 服務註冊-aspnetcore建立Eureka客戶端(client)
- 服務發現-實現服務與服務的呼叫
一 安裝單獨的Eureka服務
- 安裝tomcat,到apache官網http://tomcat.apache.org下載tomcat
- 下載Eureka,可以到http://mvnrepository.com/artifact/com.netflix.eureka/eureka-server選擇一下版本下載
- 配置埠,預設是8080,tomcat\webapps\eureka\WEB-INF\classes\eureka-client.properties
- 重啟tomcat服務即可
二 aspnetcore建立Eureka客戶端(client)
- nuget新增包包Pivotal.Discovery.Client
- 在startup.cs裡新增客戶端的自動發現程式碼(相對於eureka是客戶端,事實上它是微服務裡的一種服務)
- program裡新增對某個埠的監聽
- 將EurekaServer的地址新增到appsettings裡
- 啟動專案,然後去服務中心檢視自己的新服務
在startup.cs裡
public void ConfigureServices(IServiceCollection services) { services.AddDiscoveryClient(Configuration); services.AddMvc(); } // 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(); app.UseDiscoveryClient(); }
program裡新增對某個埠的監聽
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://*:8010") .Build();
將EurekaServer的地址新增到appsettings裡,其中8010是自己監聽的埠,Order是自己的名稱
"spring": { "application": { "name": "Order" } }, "eureka": { "client": { "serviceUrl": "http://localhost:8080/eureka/V2/", "shouldFetchRegistry": false, "shouldRegisterWithEureka": true }, "instance": { "port": 8010 }
然後啟動專案,在你的服務中心就可以看到新加的服務了(http://localhost:8080/eureka/),這就是服務的註冊!
三 服務發現-實現服務與服務的呼叫
我們在某個微服務的專案裡,可以呼叫其它的服務,這類似於一種請求鏈的過程,以後我們講spring cloud裡會說其它相關的技術
[HttpGet] public IEnumerable<string> Get() { DiscoveryClient _discoveryClient = new DiscoveryClient(new EurekaClientConfig { EurekaServerServiceUrls = "http://localhost:8080/eureka/V2/", ProxyHost = "http://localhost:8080/eureka/V2/", ProxyPort = 8080, }); //得到服務中心所有服務和它的Url地址 foreach (var item in _discoveryClient.Applications.GetRegisteredApplications()) yield return $"{item.Name}={item.Instances.FirstOrDefault().HomePageUrl}"; }
頁面顯示的結果中我們看到了所有的服務,它的名稱和它的URL,這種URL在容器化部署裡是動態的,所以我們不能像原來那樣,把它寫死了,這也就是服務發現產生的原因!
好了,今天對於服務註冊與服務發現就說到這裡,都是比較實幹的東西!
感謝各位閱讀!