spring-cloud-demo-01-eureka
本Demo演示了Eureka服务端的搭建,以及消费者如何通过Eureka服务注册中心调用其他供应者提供的接口。
源码:https://github.com/seepine/spring-cloud-demo
模块介绍
spring-cloud-demo-01-eureka模块分为三个子模块,分别为Eureka-Server(Eureka服务端)、Eureka-Provider(供应者)和Eureka-Consumer(消费者)。
一、Eureka服务注册与发现
1.Eureka-Server
1.1 添加依赖
1 2 3 4 5 6
| <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
|
1.2 在启动类上添加注解@EnableEurekaServer
1 2 3 4 5 6 7
| @EnableEurekaServer @SpringBootApplication public class SpringCloudDemo01EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(SpringCloudDemo01EurekaServerApplication.class, args); } }
|
1.3 添加配置文件
1 2 3 4 5 6 7 8 9 10
| server: port: 8761 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
|
2.Eureka-Provider
1.1 添加依赖
1 2 3 4 5 6 7 8 9 10
| <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
|
1.2 添加配置文件
1 2 3 4 5 6 7 8 9 10
| server: port: 8761 eureka: instance: hostname: localhost client: register-with-eureka: false fetch-registry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
|
启动Demo
- 1.启动Eureka-Server
- 2.启动Eureka-Provider
- 3.启动Eureka-Consumer
结果检验
打开http://localhost:8761/,将会看到Eureka的界面以及Eureka-Provider和Eureka-Consumer服务
二、生产者与消费者(RestTemplate)
1.Eureka-Provider
1.1 添加接口
1 2 3 4 5 6 7 8
| @RestController public class ApiController { @RequestMapping("/hello/{name}") public String hello(@PathVariable String name) { System.out.println("I am provider , name :" + name); return "hello " + name; } }
|
1.2 测试接口
2.Eureka-Consumer
1.1 添加接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @RestController @AllArgsConstructor public class ApiController { private DiscoveryClient discoveryClient; private RestTemplate restTemplate;
@RequestMapping("/hello/{name}") public String hello(@PathVariable String name) { System.out.println("I am consumer , name :" + name); List<ServiceInstance> instances = discoveryClient.getInstances("provider"); if (!instances.isEmpty()) { ServiceInstance serviceInstance = instances.get(0); return restTemplate.getForObject(serviceInstance.getUri().toString() + "/hello/" + name, String.class); } return "not find provider"; } }
|
1.2 测试接口
同时Eureka-Provider控制台打印出,说明能够通过Eureka-consumer的接口,调用Eureka-Provider的接口
1
| I am provider , name :seepine
|
三、生产者与消费者(Feign)
1.Eureka-Consumer
1.1 添加Feign依赖
1 2 3 4
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
|
1.2 启动类添加注解(@EnableFeignClients)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @EnableEurekaClient @SpringBootApplication @EnableFeignClients public class SpringCloudDemo01EurekaConsumerApplication { @Bean public RestTemplate restTemplate() { return new RestTemplate(); }
public static void main(String[] args) { SpringApplication.run(SpringCloudDemo01EurekaConsumerApplication.class, args); }
}
|
1.3 添加FeignService
1 2 3 4 5 6 7 8
| package com.seepine.demo.eureka.consumer.feign;
@FeignClient("provider") public interface RemoteApiService { @GetMapping("/hello/{name}") String sayHello(@PathVariable("name") String name); }
|
1.4 添加接口
1 2 3 4 5 6 7 8 9 10
| @RestController @AllArgsConstructor public class ApiController { private RemoteApiService remoteApiService;
@RequestMapping("/helloByFeign/{name}") public String helloByFeign(@PathVariable String name) { return remoteApiService.sayHello(name); } }
|
1.5 测试接口
同时Eureka-Provider控制台打印出,说明能够通过Eureka-consumer的接口,调用Eureka-Provider的接口
1
| I am provider , name :seepine-feign
|
四、Eureka-Server增加用户验证
1.添加依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
|
2.添加配置
1 2 3 4 5
| spring: security: user: name: seepine password: 123456
|
4.修改所有Eureka连接url
1
| http://seepine:123456@${eureka.instance.hostname}:${server.port}/eureka/
|