首先解释一下集群与分布,
集群:就是把一个业务放到不同的服务器上,集群是一个比较有组织的架构,如果其中一个节点挂掉,其他节点可以顶上来,所以集群服务的健壮性比较好。
分布:简单来说就是,把一个大的业务拆分成多个小业务分别部署在不同的服务器上,如果一个节点挂掉,这个业务就挂了,如果这个业务还会被其他业务调用的话,那么另一个业务也挂了,所以其健壮性不好。
开始干活:
搭建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就可以看到主页了,就表示服务集群部署成功。