在前文 "一窺Spring Cloud Eureka" 中,已經構建了基於Eureka的服務端與客戶端,可用於實現服務註冊與發現功能。而藉助Steeltoe的類庫,可以在.NET生態系統中使用Spring Cloud的現有模塊。 Package 對於ASP.NET Core,使用 類庫。 對於Con ...
在前文一窺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();
}
啟動後,可以看到所顯示的值已發生變化,因為其是從新的服務中取得的。