1、更改系统配置
C:\Windows\System32\drivers\etc\ 打开 hosts文件,加入 127.0.0.1 eureka-colony1 eureka-colony2
2、创建eureka服务中心集群 eureka-colony
pom.xml:
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.boce</groupId> <artifactId>eureka-colony</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-colony</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!-- 非继承方式引入maven依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml:
server: port: 8761 spring: profiles: eureka-colony1 eureka: instance: hostname: eureka-colony1 client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://eureka-colony2:8762/eureka/ server: # 关闭自我保护 enable-self-preservation: false # 清理服务器 eviction-interval-timer-in-ms: 5000 --- server: port: 8762 spring: profiles: eureka-colony2 eureka: instance: hostname: eureka-colony2 client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://eureka-colony1:8761/eureka/ server: # 关闭自我保护 enable-self-preservation: false # 清理服务器 eviction-interval-timer-in-ms: 5000
EurekaColonyApplication.java 项目启动文件:
@SpringBootApplication @EnableEurekaServer public class EurekaColonyApplication { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String profiles = scanner.nextLine(); new SpringApplicationBuilder(EurekaColonyApplication.class).profiles(profiles).run(args); } }
启动两次项目,服务名分别为eureka-colony1和eureka-colony2,查看服务中心,两个eureka服务中心已经被相互管理
3、创建eureka服务提供者,向服务中心注册
pom.xml:
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.boce</groupId> <artifactId>eureka-service</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-service</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!-- 非继承方式引入maven依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml:
spring: application: name: eureka-service # 可访问全部敏感端口 # /evn 服务的全部环境变量信息 # /health 当前服务状态 endpoints: sensitive: false eureka: instance: #心跳设置,告诉服务器该实例仍在使用 lease-renewal-interval-in-seconds: 5 #告诉服务器如果10秒内未发送任何续约请求,则关闭该客户端 lease-expiration-duration-in-seconds: 10 metadata-map: company-name: in client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/, http://127.0.0.1:8762/eureka/ instance-info-replication-interval-seconds: 10 logging: level: com.netflix: DEBUG
User.java:
public class User { private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } private String port; public String getPort() { return port; } public void setPort(String port) { this.port = port; } }
MyRestController.java:
@RestController public class MyRestController { public static boolean isDB = true; @GetMapping(value = "/setIsDB/{isDB}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public void setIsDB(@PathVariable boolean isDB) { this.isDB = isDB; } @GetMapping(value = "/getUser/{id}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public User getUser(@PathVariable Integer id, HttpServletRequest request){ User user = new User(); user.setId(id); user.setUsername("中文"); user.setPassword("123"); user.setPort(request.getRequestURL().toString()); return user; } }
启动类EurekaServiceApplication.java:
@SpringBootApplication @EnableEurekaClient public class EurekaServiceApplication { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String port = scanner.nextLine(); new SpringApplicationBuilder(EurekaServiceApplication.class) .properties("server.port=" + port).run(args); } }
启动项目,并查看eureka服务中心,8081与8082两个服务提供者的实例已被服务中心管理
3、创建eureka服务调用者eureka-invocation
pom.xml:
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.boce</groupId> <artifactId>eureka-invocation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>eureka-invocation</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!-- 非继承方式引入maven依赖 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency><!-- 负载均衡 --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml:
server: port: 8666 spring: application: name: eureka-invocation eureka: instance: # 心跳设置,告诉服务器该实例仍在使用 lease-renewal-interval-in-seconds: 5 # 告诉服务器如果10秒内未发送任何续约请求,则关闭该客户端 lease-expiration-duration-in-seconds: 10 client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/, http://127.0.0.1:8762/eureka/ # 抓取服务列表 registry-fetch-interval-seconds: 30 # 默认负载均衡器规则 #default: # ribbon: # NFLoadBalancerRuleClassName: com.boce.controller.MyRule logging: level: com.netflix: DEBUG
BaseConfig.java:
@Configuration public class BaseConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
MyRestController.java:
@RestController public class MyRestController { @Autowired private RestTemplate restTemplate; /** * 调用服务提供者的接口 * * @param id * @return */ @GetMapping(value = "/getUser/{id}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public String getUser(@PathVariable Integer id) { String templateUrl = "http://eureka-service/getUser/" + id; String result = restTemplate.getForObject(templateUrl, String.class); return result; } }
启动类EurekaInvocationApplication.java:
@SpringBootApplication @EnableEurekaClient public class EurekaInvocationApplication { public static void main(String[] args) { SpringApplication.run(EurekaInvocationApplication.class, args); } }启动项目调用 http://127.0.0.1:8666/getUser/1 接口: