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用具体“业务”提供或消费服务。
标签:NetCore,spring,eureka,client,注册,Eureka,true,public,Discovery From: https://www.cnblogs.com/jonney-wang/p/17269524.html