1、更改系统配置:
C:\Windows\System32\drivers\etc\ 打开 hosts文件,加入 127.0.0.1 eureka-colony1 eureka-colony2
2、创建eureka服务中心集群 eureka-colony
pom.xml
<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
<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);
}
}
3、创建eureka服务调用者eureka-invocation
pom.xml
<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);
}
}