首先解释一下集群与分布, 集群:就是把一个业务放到不同的服务器上,集群是一个比较有组织的架构,如果其中一个节点挂掉,其他节点可以顶上来,所以集群服务的健壮性比较好。 分布:简单来说就是,把一个大的业务拆分成多个小业务分别部署在不同的服务器上,如果一个节点挂掉,这个业务就挂了,如果这个业务还会被其他业务调用的话,那么另一个业务也挂了,所以其健壮性不好。
开始干活: 搭建eureka集群: 重要的说在前边:注意springboot和springcloud版本的匹配问题,可以百度,也可以使用我的pom.xml中给出的版本
开启 Eureka 集群配置后,服务启动时 Eureka Server 会将注册信息向其它 Eureka Server 进行同步,因此搭建高可用架构只需要将 Eureke Server 配置指向其它可用的 serviceUrl 即可。一会到配置文件中还会有解释
首先建立三个springboot的项目(这个要不会,找度娘吧) 这三个项目分别是eurekaA,eurekaB,eurekaC,这是三个 Eureka Server 的集群。
第一个Eureka server的配置如下:
package com.test.spring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //启动服务注册中心
public class SpringcloudMutilApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudMutilApplication.class, args);
}
}
application.yml
spring:
application:
name: eureka server
server:
port: 8001
eureka:
instance:
hostname: eurekaA
client:
serviceUrl.defaultZone: http://eurekaB:8002/eureka/,http://eurekaC:8003/eureka/ #集群的情况下,服务器要相互注册互相指向对方
register-with-eureka: false #服务注册 false 自己不注册到服务中心,因为自己就是注册中心,维护服务实例
fetch-registry: false #服务发现 表示自己端就是注册中心 我的职责就是维护服务实例 false 自己不获取注册信息
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 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.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test.spring</groupId>
<artifactId>demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
<!--在使用springboot集成springcloud的时候,注意版本的匹配,否则运行失败-->
<spring-cloud-version>Hoxton.SR8</spring-cloud-version>
</properties>
<dependencies>
<!--springboot起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--集成springcloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--springtest起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
<!--springboot打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第二个Euraka server 项目启动文件:
package com.test.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //启动服务注册中心
public class SpringbootMultiBApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMultiBApplication.class, args);
}
}
application.yml
spring:
application:
name: eureka server
server:
port: 8002
eureka:
instance:
hostname: eurekaB
client:
register-with-eureka: false
fetch-registry: false
service-url: #这个要指向其他的两个eureka server
defaultZone: http://eurekaA:8001/eureka/,http://eurekaC:8003/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 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.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test.springboot</groupId>
<artifactId>springboot-multi-b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-multi-b</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<!--在使用springboot集成springcloud的时候,注意版本的匹配,否则运行失败-->
<spring-cloud-version>Hoxton.SR8</spring-cloud-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
第三个Eureka server: springboot启动文件:
package com.test.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //服务注册中心
public class SpringbootMulticApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMulticApplication.class, args);
}
}
application.yml
spring.application.name=eureka server
server.port=8003
eureka.instance.hostname=eurekaC
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://eurekaA:8001/eureka/,http://eurekaB:8002/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 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.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test.springboot</groupId>
<artifactId>springboot-multic</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-multic</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<!--在使用springboot集成springcloud的时候,注意版本的匹配,否则运行失败-->
<spring-cloud-version>Hoxton.SR8</spring-cloud-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
三个服务器部署好之后分别启动, 然后访问localhost:8001就可以看到主页了,就表示服务集群部署成功。