eureka部署方案
前置
springCloud 部署eureka官方文档地址:
https://spring.io/ —> projects --> spring cloud -->Spring Cloud Netflix --> learn --> Reference Doc
GitHub:https://github.com/Netflix/Eureka
一、 eureka部署
1、单机部署
1)服务端配置
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 启动类上加入配置
@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaApplication.class, args);
}
}
- application.yml配置
server:
port: 9000
eureka:
client:
#是否将自己注册到Eureka Server 默认为true:注册
register-with-eureka: false
#是否从Eureka Server获取注册的服务信息 默认为true:拉取
fetch-registry: false
service-url:
#访问eureka时使用:http://localhost:9000 ,不要使用:http://localhost:9000/eureka/
defaultZone: http://localhost:9000/eureka/
2)客户端配置
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 不引入spring-boot-starter-web 启动会报错 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- application.yml配置
server:
port: 8080
eureka:
client:
service-url:
defaultZone: http://localhost:9000/eureka/
instance:
hostname: localhost
spring:
application:
name: cloud-eureka-client
2、集群部署(两台eureka服务)
1) 服务端配置
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 启动类上加入配置
@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaApplication.class, args);
}
}
- application.yml配置
eureka:
client:
#是否将自己注册到Eureka Server 默认为true:注册
register-with-eureka: true
#是否从Eureka Server获取注册的服务信息 默认为true:拉取
fetch-registry: true
---
spring:
profiles: 9000
server:
port: 9000
eureka:
instance:
hostname: eureka-9000
client:
service-url:
#填写另一台eureka服务器地址,向其注册
defaultZone: http://eureka-9001:9001/eureka/
---
spring:
profiles: 9001
server:
port: 9001
eureka:
instance:
hostname: eureka-9001
client:
service-url:
#填写另一台eureka服务器地址,向其注册
defaultZone: http://eureka-9000:9000/eureka/
- 修改
C\Windows\System32\drivers\etc\hosts
文件
127.0.0.1 eureka-9000
127.0.0.1 eureka-9001
- 访问http://eureka-9000:9000 , http://eureka-9001:9001, 发现都有了对方的注册信息,则部署成功
- 注意事项
问题:访问http://eureka-9000:9000 后发现下图问题,unavailable-replicas:有值,available-replicas:没有值
解决
- 检查register-with-eureka ,与fetch-registry 的值是否为true
- 检查hostname 与 service-url 中的域名是否一致
- 检查hosts文件是否已修改
2) 客户端配置
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 不引入spring-boot-starter-web 启动会报错 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- application.yml配置
server:
port: 8080
eureka:
client:
service-url:
#可以全都配上也可以只配置某一条,eureka 服务端会相互拉取注册表,服务调用时会根据配置顺序轮询
defaultZone: http://eureka-9000:9000/eureka/,http://eureka-9001:9001/eureka/
instance:
hostname: localhost
spring:
application:
name: cloud-eureka-client
3、eureka鉴权配置
1)服务端配置
- 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 启动类上加入配置
@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaApplication.class, args);
}
/**
* 允许Security跨域访问,否则客户端连接eureka会抛出异常
* com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
*/
/**
Spring 5.0后,WebMvcConfigurerAdapter被废弃
**/
@EnableWebSecurity
static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 关闭csrf
http.csrf().disable();
super.configure(http);
}
}
}
- application.yml配置
server:
port: 9000
eureka:
client:
#是否将自己注册到Eureka Server 默认为true:注册
register-with-eureka: false
#是否从Eureka Server获取注册的服务信息 默认为true:拉取
fetch-registry: false
service-url:
#访问eureka时使用:http://localhost:9000 ,不要使用:http://localhost:9000/eureka/
defaultZone: http://localhost:9000/eureka/
spring:
security:
basic:
#开启鉴权
enabled: true
user:
name: 用户名
password: 密码
2)客户端配置
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 不引入spring-boot-starter-web 启动会报错 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- application.yml配置
spring:
application:
name: demo
server:
port: 8083
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://用户名:密码@localhost:9000/eureka/
二、eureka相关配置
eureka.instance下的hostname即主机名不配置的话默认为电脑名,instanceID不配置的话默认值为主机名+服务名+端口,
prefer-ip-address表示猜测主机名(hostname)为ip形式,不配置的话默认为false
instanceID 如果设置相同 则多个实例会被识别成一个实例