目录
一、前言:
二、创建Eureka Server
三、调整7001端口注册中心
四、调整服务提供者的配置文件:
五、总结
一、前言:
在旧版本的时候,已经讲解过如何搭建Eureka注册中心集群,小伙伴们可以参考:进行学习。
版本说明:
SpringBoot:2.2.2.RELEASE
SpringCloud:Hoxton.SR1
本文主要搭建Spring Cloud Eureka服务注册中心(多节点),注意,本文所使用的的项目是基于上一节单节点进行搭建的。
二、创建Eureka Server
上一篇文章我们已经创建了端口号为7001的服务注册中心,这里我们再创建一个7002端口的注册中心,简单一点,组成两个节点的Eureka集群。
【a】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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud2020</artifactId>
<groupId>com.wsh.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-eureka-server7002</artifactId>
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.wsh.springcloud</groupId>
<artifactId>springcloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
【b】application.yml
server:
port: 7002
spring:
application:
name: springcloud-eureka-server #应用名称
eureka:
instance:
hostname: springcloud-eureka7002.com #eureka服务端的实例名称
client:
fetch-registry: true #false表示不需要去检索服务实例
register-with-eureka: true #false表示不向注册中心注册自己
service-url:
defaultZone: http://springcloud-eureka7001.com:7001/eureka/
注意点:这里instance.name尽量不要指定为localhost。
【c】启动类加上@EnableEurekaServer注解,开启Eureka服务发现的功能
package com.wsh.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Description Eureka服务注册中心
* @Date 2020/7/26 8:55
* @Author weishihuai
* 说明: Eureka Server的高可用实际上就是将自己做为服务向其他服务注册中心注册自己。只要有一条边将节点连接,就可以进行信息传播与同步。可以采用两两注册的方式实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
*/
@SpringBootApplication
//@EnableEurekaServer: 开启Eureka服务注册和发现功能(服务端)
@EnableEurekaServer
public class SpringCloudEurekaServiceApplication7002 {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaServiceApplication7002.class, args);
}
}
【d】修改C:\Windows\System32\drivers\etc文件下的hosts文件,加入上面配置文件中的域名映射:
127.0.0.1 springcloud-eureka7001.com
127.0.0.1 springcloud-eureka7002.com
三、调整7001端口注册中心
主要修改application.yml配置文件:
server:
port: 7001
spring:
application:
name: springcloud-eureka-server #应用名称
eureka:
instance:
hostname: springcloud-eureka7001.com #eureka服务端的实例名称
client:
fetch-registry: true #false表示不需要去检索服务实例
register-with-eureka: true #false表示不向注册中心注册自己
service-url:
defaultZone: http://springcloud-eureka7002.com:7002/eureka/
如上配置,可见,在7001的注册中心,指定的eureka.client.service-utl.defaultZone的地址为7002的eureka地址,在7002上面,指定的eureka.client.service-utl.defaultZone的地址为7001的eureka地址。
- 小总结:Eureka Server集群搭建的关键点就是:Eureka两两相互注册,互相观望
四、调整服务提供者的配置文件:
server:
port: 8001 #指定服务端口号
spring:
application:
name: springcloud-payment-service #指定服务名称
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
driver-class-name: com.mysql.jdbc.Driver # mysql驱动包&useSSL=false
url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf-8 #数据库地址
username: root #数据库用户名
password: root #数据库用户密码
mybatis:
mapperLocations: classpath:mapper/*.xml #mapper.xml文件扫描位置
type-aliases-package: com.wsh.springcloud.entity # 所有Entity别名类所在包
eureka:
client:
register-with-eureka: true #注册到Eureka注册中心
fetch-registry: true #开启检索服务
service-url:
# defaultZone: http://localhost:7001/eureka/ #单机版Eureka注册中心
defaultZone: http://springcloud-eureka7001.com:7001/eureka/,http://springcloud-eureka7002.com:7002/eureka/ #集群版Eureka注册中心
注意到,这里指定的defaultZone为:http://springcloud-eureka7001.com:7001/eureka/,http://springcloud-eureka7002.com:7002/eureka/,即同时注册到两个EurekaServer上面。当然也可以只指定注册到任意一个,因为2个注册中心组成了集群,eureka客户端通过springcloud-eureka7001.com同步给了与之互相注册的springcloud-eureka7002.com。
- 两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
下面我们依次启动各个微服务,启动完成之后,浏览器访问http://springcloud-eureka7001.com:7001/和http://springcloud-eureka7002.com:7002/,如下图,可以看到服务注册中心相互进行了注册,并且都在available-replicas可用分片中。
并且我们使用postman测试,访问http://localhost:80/consumer/payment/get/3,查看返回结果:
可见,接口正常返回数据,至此,Eureka Server集群搭建完成,有兴趣的小伙伴可以尝试停掉某个Eureka Server,然后继续请求接口,看下单个节点down掉是否会影响其他微服务正常使用。
五、总结
a. 两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现。
b. 首先需要注意必须开启服务注册中心的检索服务、注册自身服务的功能,否则会出现多节点的注册中心都不可用,全部服务都会出现在unavailable-replicas不可用分片中。
#要么不写,要么必须指定为true
eureka:
client:
fetch-registry: true #是否检索服务
register-with-eureka: true #表示向Eureka注册自身服务
c. spring.application.name必须相同,否则也会出现注册中心不能高可用,出现在unavailable-replicas不可用分片中。
相关项目的代码我已经放在Gitee上,有需要的小伙伴可以去拉取进行学习:https://gitee.com/weixiaohuai/springcloud_Hoxton
以上就是集群版本的Eureka服务注册中心搭建的详细过程,由于笔者水平有限,如有不对之处,还请小伙伴们指正,相互学习,一起进步。