3.1 创建Eureka子工程
- 完整工程源码:https://gitee.com/forwardxiang/spring-cloud-demo.git
3.1.1 IDEA操作
-
鼠标选中父工程并且点击鼠标右键选择新建一个module
-
-
新建包结构和必要的启动类和配置文件如下:
3.2 配置Eureka服务
3.2.1 pom引入依赖
-
除了从父工程继承的依赖外,还需要在本工程pom里配置:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>parent</artifactId> <groupId>cn.forwardxiang</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka-server</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> </project>
3.2.2 启动类EurekaServerApplication
-
启动类编写(或者用工具自动生成,请自行百度):
package cn.forwardxiang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer //这里是启动Eureka服务端 @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
3.2.3 配置文件application.yml
-
用于配置本服务端口以及声明Eureka相关配置:
server: port: 10086 spring: application: name: eureka-server eureka: client: service-url: # eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址 defaultZone: HTTP://127.0.0.1:10086/eureka # 不注册自己 register-with-eureka: false # 不拉取服务 fetch-registry: false server: enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
3.3 改造业务微服务
-
业务微服务需要引入Eureka客户端依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
在业务微服务启动类上需要打开服务注册功能:
//省略 @EnableEurekaClient//开启服务注册 public class BillManagerServiceApplication { //省略 }
-
在业务微服务配置文件里需要配置Eureka服务端信息:
#省略 eureka: client: service-url: defaultZone: HTTP://127.0.0.1:10086/eureka instance: prefer-ip-address: true
3.4 改造消费微服务(可选)
- 改造完成的业务微服务就会把自己注册到Eureka,供消费者消费。
3.4.1 消费者工程创建和配置
-
作为一个子工程创建,未改造前除了继承的依赖外,只需要引入:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
-
未改造前启动类:
@SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } @Bean //用于声明消费服务方的通信客户端,交给spring容器管理 public RestTemplate restTemplate(){ return new RestTemplate(); } }
-
未改造前消费服务方服务的接口:
@RestController @RequestMapping("/consumer") public class ConsumerController { @Autowired private RestTemplate restTemplate; @GetMapping("/{id}") public User queryById(@PathVariable Long id){ String url = "HTTP://localhost:9091/user/" + id; return restTemplate.getForObject(url, User.class); } }
3.4.2 改造消费者
-
新增Eureka客户端依赖,在yml配置文件里声明Eureka服务端地址。
-
启动类改造:
//省略 @EnableDiscoveryClient //开启服务发现 public class BillManagerServiceApplication { //省略 }
-
消费接口更改为依靠Eureka动态提供的url服务:
@GetMapping("/{id}") public User queryById(@PathVariable("id") Long id) { List<ServiceInstance> serviceInstances = discoveryClient.getInstances("user-service"); ServiceInstance serviceInstance = serviceInstances.get(0); String url = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/user/" + id; return restTemplate.getForObject(url, User.class); }