zoukankan      html  css  js  c++  java
  • 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();
    }
    

    启动后,可以看到所显示的值已发生变化,因为其是从新的服务中取得的。

  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/kenwoo/p/9691058.html
Copyright © 2011-2022 走看看