Steeltoe之Service Discovery篇
阿新 • • 發佈:2018-12-11
在前文一窺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();
}
啟動後,可以看到所顯示的值已發生變化,因為其是從新的服務中取得的。