Steeltoe之Service Discovery篇
在前文 ofollow,noindex" target="_blank">一窺Spring Cloud Eureka 中,已經構建了基於Eureka的服務端與客戶端,可用於實現服務註冊與發現功能。而藉助Steeltoe的類庫,可以在.NET生態系統中使用Spring Cloud的現有模組。
Package
對於ASP.NET Core,使用 Steeltoe.Discovery.ClientCore
類庫。
對於Console/ASP.NET 4.x,使用 Steeltoe.Discovery.EurekaBase
類庫。
服務發現
先建立一個ASP.NET Core專案,其可以找到已在Eureka的服務端註冊的服務,並利用這些服務完成所需功能。
appsettings.json
首先設定Eureka服務端地址,並確定當前應用程式能夠發現服務但本身不會被註冊為服務。
{ "eureka": { "client": { "serviceUrl": "http://localhost:8765/eureka/", "shouldFetchRegistry": true, "shouldRegisterWithEureka": false } } }
Startup.cs
加入DiscoveryClient服務並使用它。
public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDiscoveryClient(Configuration); services.AddMvc(); } public void Configure(IApplicationBuilder app, ...) { app.UseMvc(); app.UseDiscoveryClient(); }
Controller
從已註冊的Eureka客戶端,即之前建立的Spring Cloud服務中獲取資料。
public class HomeController : Controller { DiscoveryHttpClientHandler _handler; public HomeController(IDiscoveryClient client) { _handler = new DiscoveryHttpClientHandler(client); } public IActionResult Index() { var client = new HttpClient(_handler, false); var result = client.GetStringAsync("http://SPRINGCLOUD-EUREKA-CLIENT/hello").Result; ViewData["message"] = result; return View(); } }
該服務的地址是它用於註冊的application name。
啟動ASP.NET Core應用程式,可以看到頁面顯示了來自Spring Cloud服務的資料。
服務註冊
再建立一個ASP.NET Core API專案,並將其註冊到Eureka的服務端。
appsettings.json
該應用程式不需要發現服務,但需要在Eureka服務端上註冊服務。這裡可以看到比上一專案更多的配置,因為它需要提供應用名稱,埠號及主機名稱。
{ "eureka": { "client": { "serviceUrl": "http://localhost:8765/eureka/", "shouldFetchRegistry": false, "shouldRegisterWithEureka": true }, "instance": { "appName": "NET-API", "port": 5000, "hostName": "localhost" } } }
Startup.cs
與上一專案同樣的配置。
Controller
建立一個簡單的API方法。
[Route("api/[controller]")] [ApiController] public class ValuesController : ControllerBase { // GET api/values [HttpGet] public ActionResult<string> Get() { return "Hello World NET-API!"; } }
啟動服務
可以在Eureka服務端中看到新註冊的服務。
呼叫服務
將上一個專案中所呼叫API的地址改成新服務的。
public IActionResult Index() { var client = new HttpClient(_handler, false); var result = client.GetStringAsync("http://NET-API/api/values").Result; ViewData["message"] = result; return View(); }
啟動後,可以看到所顯示的值已發生變化,因為其是從新的服務中取得的。
