Steeltoe之Service Discovery篇


在前文一窺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();
}

啟動后,可以看到所顯示的值已發生變化,因為其是從新的服務中取得的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM