这里我们不再介绍SpringCloud的知识,直接搭建框架。
这里我们选择将不同的模块创建在一个父项目下。
一、创建父项目
1、新建一个springboot项目
2、pom文件内容(依赖)
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<skipTests>true</skipTests>
</properties>
<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>
二、创建Eureka注册中心
1、在父项目下新建一个模块
这个模块中,就选择Maven Project
2、引用的依赖
<!-- 这里就选择父项目的包 -->
<parent>
<groupId>com.hezhan</groupId>
<artifactId>springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<!-- end -->
<artifactId>server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>server</name>
<description>Demo project for Spring Cloud</description>
<properties>
<java.version>1.8</java.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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
3、配置启动类
在启动类上加上注解:@EnableEurekaServer
4、配置文件
server:
port: 8761
eureka:
client:
# 让自己不需要注册在eureka上,表明自己是一个eureka server
# register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/
server:
enable-self-preservation: false
instance:
prefer-ip-address: true
spring:
application:
name: eureka-server
5、启动
运行这个子模块,然后在浏览器输入:http://localhost:8761
三、创建Eureka客户端
1、在父项目下创建一个子模块
这步和上面的Eureka注册中心创建的子模块一样。
2、引用的依赖
这里由于都是子模块,所以pom.xml中,parent都是父项目的包,这点儿和上面的注册中心的那个子模块一致
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
这里引入spring-cloud-starter-netflix-eureka-client依赖,表明是一个Eureka客户端。并且,启动了上不需要再添加 @EnableEurekaClient 注解,运行时自动会作为客户端注册到Eureka上面。
3、配置文件
server:
port: 9092
spring:
application:
name: client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
ip-address: 127.0.0.1
然后启动此模块,刷新上面打开的注册中心的页面,就会发现对应的服务已经注册上去了。
四、高可用的Eureka注册中心
上面说的注册中心,我们只有一个节点,假如这个注册中心服务挂掉了,那么在上面注册的服务都会受到影响,所以这里我们可以建一个高可用的注册中心集群。
这里我们依然还用上面创建的注册中心的模块,只不过添加三个配置文件
我们这里选择使用三个节点组成一个集群
其中peer1中的配置文件为:
server:
port: 8761
eureka:
client:
# 让自己不需要注册在eureka上,表明自己是一个eureka server
# register-with-eureka: false
fetch-registry: false
service-url:
# 这里的地址是另外两个注册中心的地址
defaultZone: http://localhost:8861/eureka/,http://localhost:8961/eureka/
server:
enable-self-preservation: false
instance:
prefer-ip-address: true
spring:
application:
name: eureka-server
peer2的配置文件:
server:
port: 8861
eureka:
client:
# register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8961/eureka/
server:
enable-self-preservation: false
instance:
prefer-ip-address: true
spring:
application:
name: eureka-server
peer3配置文件:
server:
port: 8961
eureka:
client:
# register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8861/eureka/
server:
enable-self-preservation: false
instance:
prefer-ip-address: true
spring:
application:
name: eureka-server
我们发现这三个配置文件只有 defaultZone 这个配置的值不同,这个配置的值是除自己之外的其他几个注册中心的地址。
然后分别运行这三个配置文件的项目,启动成功后,随便打开其中一个注册中心的地址,我们可以看到:
这几个配置中心都已经注册上来了,并且互相之间可以共享注册数据,客户端注册时,只需要注册到其中的一个配置中心上,就会同步到其余的配置中心里。