@TOC
版本
是springcloud版本要和springboot一致
1/搭建eureka注册中心
1) 通过向导创建 Eureka Server,Spring Cloud Discovery → Eureka Server
2) pom.xml
把spring-boot-starter-parent的version改成2.1.4.RELEASE
把spring-cloud.version改成Greenwich.SR1
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com</groupId>
<artifactId>0222-eureka-server</artifactId>
<version>1.0</version>
<name>0222-eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3) application.yml
server:
port: 7776
eureka:
client:
service-url:
defaultZone: http://localhost:7776/eureka/
register-with-eureka: false #禁止自己被当做服务注册
fetch-registry: false #屏蔽注册信息
目前是单服务器,所有两个false,如果是多注册中心register-with-eureka: true
一般为了稳定和安全,一般配置两个注册中心,可以互相备份,避免挂了
4) 启动类注解@EnableEurekaServer
5) 启动, 访问http://localhost:7776
单注册中心,访问的是自己
6) 自我保护机制,高可用,上线后不要关闭,开发时可以关
默认状态是true
eureka:
server:
enable-self-preservation: false
2. 搭建Eureka Client
1) Spring Cloud Discovery → Eureka Discovery Client
2) pom.xml
把spring-boot-starter-parent的version改成2.1.4.RELEASE
把spring-cloud.version改成Greenwich.SR1
关键依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3) application.yml
name可改,表示我以这个名称向注册中心注册
eureka表示向哪个注册中心进行注册
server:
port: 8081
spring:
application:
name: demo-eureka-provider
eureka:
client:
service-url:
defaultZone: http://localhost:7776/eureka/
4) Provider 启动类注解@EnableDiscoveryClient
5) 添加依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com</groupId>
<artifactId>0222-eureka-client</artifactId>
<version>1.0</version>
<name>0222-eureka-client</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动启动类
发现已经注册成功
相同的应用名,不同的端口或不同的IP地址,在spring cloud的环境下自动形成一个集群(根据应用名来判断)
2.1、client的集群化
配置文件的处理
server:
port: 8081
spring:
profiles: c1
---
server:
port: 8082
spring:
profiles: c2
---
spring:
application:
name: eureka-client
eureka:
client:
service-url:
defaultZone: http://root:123456@server1:7776/eureka/,http://root:123456@server2:7777/eureka/
启动类的处理
然后分别启动不同的启动类
这两个应用名一样,除了端口和识别名称不一样
就会有两个同名应用,会自动形成一个集群
3. 注册中心添加用户认证
1) 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2) 添加配置
spring:
security:
user:
name: root
password: 123456
3) 添加配置文件类
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable(); //关闭csrf
super.configure(http); //开启认证
}
}
4) 修改服务器和客户端的注册中心地址
在client里面,原来
现在, http://用户名:密码@localhost:7776/eureka/
4. 多注册中心
可以被发现 register-with-eureka: true
可以被注册 fetch-registry: true
1) 注册中心修改
spring:
application:
name: demo-eureka-server
eureka:
instance:
hostname: server1 # hosts文件中配置域名解析,hostname要不同
client:
service-url:
defaultZone: http://root:123456@server2:7777/eureka/ #其他注册中心
register-with-eureka: true
fetch-registry: true
server
server:
port: 7776
eureka:
instance:
hostname: server1
# client:
# service-url:
# defaultZone: http://root:123456@server2:7777/eureka/
# register-with-eureka: true
# fetch-registry: true
spring:
profiles: s1
---
server:
port: 7777
eureka:
instance:
hostname: server2
spring:
profiles: s2
---
eureka:
client:
service-url:
defaultZone: http://root:123456@server1:7776/eureka/,http://root:123456@server2:7777/eureka/
register-with-eureka: true
fetch-registry: true
spring:
application:
name: demo-eureka-server
security:
basic:
enabled: true
user:
name: root
password: 123456
client
server:
port: 8081
spring:
profiles: c1
---
server:
port: 8082
spring:
profiles: c2
---
spring:
application:
name: eureka-client
eureka:
client:
service-url:
defaultZone: http://root:123456@server1:7776/eureka/,http://root:123456@server2:7777/eureka/
2) 注意: 单机模拟时, 需要在C:\Windows\System32\drivers\etc\hosts文件中配置主机名
例: 127.0.0.1 server1
127.0.0.1 server2
2) 创建其它的注册中心应用
可以使用IDEA将单个web应用集群化的方式进行处理
启动集群
分别登陆7776和7777
默认向前一个注册中心注册,前一个挂了才会向后一个注册