eureka是netflix开源服务发现组件,它本身也是一个机遇REST的服务,包含server端和client端。
使用 Spring Initializr初始化Spring Cloud 项目:
pom.xml
4.0.0
com.springcloud
eureka_server
0.0.1-SNAPSHOT
jar
eureka_server
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8
UTF-8
1.8
//Spring Cloud 版本
Finchley.SR1
org.springframework.boot
spring-boot-starter-web
//引入Spring Cloud Eureka-Server 需要jar包
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
application.properties
server.port=8761
spring.application.name=eureka_server
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#默认为true 表示将自己作为客户端注册到eureka,由于作为eureka server,故设为false
eureka.client.registerWithEureka=false
#默认为true,表示从eureka server获取服务列表信息,eureka实现高可用时,可以设置为true
eureka.client.fetchRegistry=false
EurekaServerApplication.java
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
同上使用Spring Initializr初始化Spring Cloud项目
pom.xml
//Spring Cloud Eureka Client 所需jar包
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
application.properties
server.port=8081
spring.application.name=client01
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#指定注册到eureka server实例ID
eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port}
#表示将自己的ip注册到eureka server上面
eureka.instance.prefer-ip-address=true
#指定eureka client IP地址
eureka.instance.ip-address=127.0.0.1
EurekaClientApplication
@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient
public class EurekaClientApplication {
//注意:
//@EnableDiscoveryClient:Spring Cloud 中对服务发现组件除了eureka之外,还有对Google的 Zookeeper、Consul这两大组件提供了支持,
// 这个注解可支持多组件,该注解在spring-cloud-commons这个项目中。
//@EnableEurekaClient:顾名思义指的是eureka的客户端,该注解在spring-cloud-netflix项目中。
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
eureka-server高可用
application.properties
#默认为true 表示将自己作为客户端注册到eureka,由于作为eureka server,故设为false
eureka.client.registerWithEureka=false
#默认为true,表示从eureka server获取服务列表信息,eureka实现高可用时,可以设置为true
eureka.client.fetchRegistry=true
#指定配置文件
spring.profiles.active=node-01
application-node-01.properties
server.port=8761
spring.application.name=eureka_server_node_01
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://localhost:8762/eureka/
application-node-02.properties
server.port=8762
spring.application.name=eureka_server_node-02
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
eureka_client项目application.properties中
server.port=8081
spring.application.name=client01
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/,http://localhost:8762/eureka/
#指定注册到eureka server实例ID
eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port}
#表示将自己的ip注册到eureka server上面
eureka.instance.prefer-ip-address=true
#指定eureka client IP地址
eureka.instance.ip-address=127.0.0.1
*Spring Boot 项目 支持jar方式运行,所以可以使用java -jar的方式指定配置
*java -jar eureka_server-0.0.1-SNAPSHOT.jar --spring.profiles.active=node-01
*java -jar eureka_server-0.0.1-SNAPSHOT.jar --spring.profiles.active=node-02
eureka_server项目pom中添加依赖
org.springframework.boot
spring-boot-starter-security
application.properties
#默认为true 表示将自己作为客户端注册到eureka,由于作为eureka server,故设为false
eureka.client.registerWithEureka=false
#默认为true,表示从eureka server获取服务列表信息,eureka实现高可用时,可以设置为true
eureka.client.fetchRegistry=true
#开启http basic认证
security.basic.enabled=true
#添加spring-boot-starter-security包,会默认一个user用户,在这里指定用户名
security.user.name=eureka
#添加spring-boot-starter-security包,会默认一个user用户,但密码随机生成,这里指定用户密码
security.user.password=eureka
#指定配置文件
spring.profiles.active=node-01
application-node-01.properties
server.port=8761
spring.application.name=eureka_server_node_01
#设置eureka交互地址,查询服务信息和注册服务信息,eureka高可用时,可以配置多个,并用逗号隔开
eureka.client.serviceUrl.defaultZone=http://${security.user.name}:${security.user.password}@localhost:8762/eureka/
application-node-02.properties同上
eureka_client项目application.properties
server.port=8081
spring.application.name=client01
eureka.client.serviceUrl.defaultZone=http://eureka:eureka@localhost:8761/eureka/,http://localhost:8762/eureka/
#指定注册到eureka server实例ID
eureka.instance.instance-id=${eureka.instance.ip-address}:${server.port}
#表示将自己的ip注册到eureka server上面
eureka.instance.prefer-ip-address=true
#指定eureka client IP地址
eureka.instance.ip-address=127.0.0.1
#eureka server在长时间内未收到某一个服务检查心跳,则会将该服务从列表中删除掉,默认30s,但是当网路出现故障时候,会出现大量服务与eureka server无法通信,此时将服务从eureka服务列表中删除,似乎不合理,eureka在此时开启自我保护功能,保证服务信息不被删除。
eureka.server.enable-self-preservation=true //启用自我保护