Eureka NetCore 服务注册与发现

发布时间 2023-03-29 16:53:57作者: jonney_wang

1 创建springboot eureka项目。

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.1.4</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.1</version>
        </dependency>

    </dependencies>
@SpringBootApplication
@EnableEurekaServer
public class EurekaServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServiceApplication.class, args);
    }
}
spring.profiles.active=dev
spring.application.name=eureka-server

server.port=8765

eureka.environment=dev
eureka.server.enable-self-preservation=false
eureka.server.eviction-interval-timer-in-ms=5000
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

启动项目,地址栏输入 http://172.17.17.53:8765/  eureka成功启动 

 

 

 2 netcore3.1创建一个api项目,用于提供XXX服务

nuget项目引用 Steeltoe.Discovery.Eureka(我用的版本是3.2.3)

<PackageReference Include="Steeltoe.Discovery.Eureka" Version="3.2.3" />

appsettings.json配置文件添加:

  "spring": {
    "application": {
      "name": "coreApi"
    }
  },
  "eureka": {
    "client": {
      "serviceUrl": "http://localhost:8765/eureka/",
      "shouldFetchRegistry": true, // registering as a service
      "shouldRegisterWithEureka": true, // discovering services
      "validate_certificates": false
    },
    "instance": {
      //"port": 20000,
      "preferIpAddress": true
    }
  }

添加配置:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDiscoveryClient(Configuration);
            services.addController();

        }

添加被服务提供接口:api/usr/getUsrDto,下面是controller  action代码

        /// <summary>
        /// 查站点根目录、应用名、环境名
        /// </summary> 
        [HttpGet]
        public UsrDto getUsrDto()
        {
            return new UsrDto()
            {
                Age = 34,
                CreTime = DateTime.Now,
                Id = $"BaseDirectory={AppContext.BaseDirectory},ApplicationName={env.ApplicationName},EnvironmentName={env.EnvironmentName}",
                LoginAccount = "183xxxxxx",
                Score = 9823.123456m
            };
        }

启动项目,再刷新eureka 界面:

 

 

 发现我们写的服务已经注册进来 :coreApi

3 我们再用netcore建立一个此服务的消费(调用)项目,Steeltoe.Discovery.Eureka同样nuget引用,services.AddDiscoveryClient(Configuration);也相同。配置也基本相同:

  "spring": {
    "application": {
      "name": "coreApiClient"
    }
  },
  "eureka": {
    "client": {
      "serviceUrl": "http://localhost:8765/eureka/",
      "shouldFetchRegistry": true, // registering as a service
      "shouldRegisterWithEureka": true, // discovering services
      "validate_certificates": false
    },
    "instance": {
      //"port": 20001,
      "preferIpAddress": true
    }
  }

启动项目,再刷新eureka:

 

 发现消费服务也注册进来:COREAPICLIENT

我们再写个“消费”服务,来调用COREAPI 提供的服务接口:

    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherController : ControllerBase {

        private readonly ILogger<WeatherController> _logger;
        Steeltoe.Discovery.IDiscoveryClient _client;
        Steeltoe.Common.Discovery.DiscoveryHttpClientHandler _handler;
        private const string GET_SERVICES_URL = "http://coreapi/api/usr/getUsrDto";

        public WeatherController(ILogger<WeatherController> logger, Steeltoe.Discovery.IDiscoveryClient client) {
            _logger = logger;
            _client = client;
            _handler = new Steeltoe.Common.Discovery.DiscoveryHttpClientHandler(client);
        }

        [HttpGet]
        public async Task< string> getUsrDtoProxy() {
            var resp = await HttpClientHelper.GetHttpClient(_handler).GetAsync(GET_SERVICES_URL);
            var content = await resp.Content.ReadAsStringAsync();
            return content;
        }
    }

4 重新启动COREAPICLIENT项目,让上面写的代码生效,我们用postman试试 接口getUsrDtoProxy

http://localhost:20001/weather/getUsrDtoProxy

 

 5 结束,springcloud 提供微服务框架和平台,netcore用具体“业务”提供或消费服务。