• <sup id="mk476"></sup>
    <dl id="mk476"></dl>
  • <progress id="mk476"><tr id="mk476"></tr></progress>
    <div id="mk476"><tr id="mk476"></tr></div>
    <sup id="mk476"><ins id="mk476"></ins></sup>
  • <progress id="mk476"></progress>
    <div id="mk476"></div>
    <div id="mk476"><tr id="mk476"></tr></div>
  • <div id="mk476"></div>
    <dl id="mk476"><s id="mk476"></s></dl><dl id="mk476"></dl><div id="mk476"></div>
  • <div id="mk476"></div>
    <dl id="mk476"><ins id="mk476"></ins></dl>

    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();
    }

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

    posted @ 2018-09-22 20:36 Ken.W 閱讀(...) 評論(...) 編輯 收藏
    江苏11选5软件