服务注册组件——Eureka高可用集群搭建
什么是Eureka?
服务注册组件:将微服务注册到Eureka中。
为什么需要服务注册?
微服务开发重点在一个"微"字,大型应用拆分成微型服务,意味着服务的数量不可能少。
服务之间存在调用关系,假设没有服务注册,微服务之间的调用关系就会是这个样子:
微服务的部署可能不会在同一台服务器上,而是需要通过远程调用,然后就涉及到IP地址了。理论上来说,直接通过IP地址直接通信也没有什么问题。 但是如果服务出问题,需要换一台服务器部署,ip地址就需要更改了。同时如果该服务被多个其他服务依赖,那么每一个IP地址都需要重置。
服务注册可以形象的理解为一张表,表的左边写着服务名称,而右侧对应的是IP地址。服务的调用使用名称来替代IP地址,那么当IP地址发生改变,直接修改服务注册中心的名称与IP的映射关系。其他服务由于是用名称来远程调用,所以并不需要更改。
Eureka与Zookeeper的区别
Eureka满足Ap原则,而Zookeeper满足CP原则。
(CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者最多同时满足俩)
Eureka三个角色
Eureka Server 提供服务注册和发现
Service Provider服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到
Service Consumer服务消费方从Eureka获取注册服务列表,从而能够消费服务
消费方与提供方:调用另一个服务称为消费。被另一个服务调用称为提供。
所以,同一个服务可能既是消费方也是提供方。
【注】:Eureka隐藏IP地址的功能体现在整个微服务的内部。
搭建Eureka集群
创建工程
- 创建文件夹Eureka Cluster,用IDEA打开:
- 创建msc-eureka-6001,msc-eureka-6002,msc-eureka-6003工程【jdk1.8】,
导入pom依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</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-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>
配置application.yaml
- 配置地址映射
C:\Windows\System32\drivers\etc
msc-eureka-6001,
server: port: 6001 eureka: instance: hostname: eureka6001.com #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己是注册中心,职责是维护服务,而不是调用服务 service-url: defaultZone: http://eureka6003.com:6003/eureka/,http://eureka6002.com:6002/eureka/ # 注册到eureka6003和eureka6002里
msc-eureka-6002,
server: port: 6002 eureka: instance: hostname: eureka6002.com #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己是注册中心,职责是维护服务,而不是调用服务 service-url: defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6003.com:6003/eureka/
msc-eureka-6003
server: port: 6003 eureka: instance: hostname: eureka6003.com #eureka服务端的实例名称 client: register-with-eureka: false #false表示不向注册中心注册自己。 fetch-registry: false #false表示自己是注册中心,职责是维护服务,而不是调用服务 service-url: defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/
创建主启动类并添加注解@EnableEurekaServer
package zkrun.top; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer // EurekaServer服务器端启动类,接受其它微服务注册进来 @SpringBootApplication public class App_msc_eureka_6001 { public static void main(String[] args) { SpringApplication.run(App_msc_eureka_6001.class, args); } }
启动Eureka集群
访问任意一个端口,都会显示另外两个Eureka服务
创建注册服务测试Eureka集群的高可用性
新建工程msc-provider-5001
导入pom依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR2</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.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- Eureka客户端启动需要依赖web模块--> <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>
- 配置application.yaml
server: port: 5001 spring: application: name: msc-provider #应用名称 eureka: client: service-url: defaultZone: http://eureka6001.com:6001/eureka/,http://eureka6002.com:6002/eureka/,http://eureka6003.com:6003/eureka/ instance: instance-id: msc-provider-5001 prefer-ip-address: true #访问路径可以显示IP地址
- 创建主启动类添加注解@EnableEurekaClient
package zkrun.top; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class App_msc_provider_5001 { public static void main(String[] args) { SpringApplication.run(App_msc_provider_5001.class, args); } }
- 测试Eureka集群高可用
手动停掉eureka6001,
eureka6001无法访问:
6002和6003仍然提供注册服务:
小结:
- 三个Eureka和注册服务都没有继承父工程,其pom依赖都是独立的。其中注册服务依赖spring-boot-starter-web。今后在设计父工程的pom时,应该考虑到每个子工程的依赖。
- 与Eureka同级别的服务注册组件还有Zookeeper,Consul等。根据具体的应用场景和组件的优势来决定技术选取是软件开发更应该注意的。(除了Eureka之外,同级别的其他组件也需要了解)
代码参考:https://github.com/HCJ-shadow/Eureka-Cluster
- spring cloud 服务注册中心eureka高可用集群搭建
- 利用SpringCloud搭建微服务1——注册中心Eureka组件的使用
- SpringCloud组件:搭建Eureka服务注册中心
- 1.SpringCloud简单搭建--服务的注册与发现Eureka(Finchley版本)
- 【Spring Cloud】Eureka服务注册中心搭建
- SpringCloud组件:Eureka服务注册是采用主机名还是IP地址?
- 一起来学Spring Cloud | 第二章:服务注册和发现组件 (Eureka)
- 【夯实Spring Cloud】Spring Cloud中使用Eureka集群搭建高可用服务注册中心
- SpringCloud第一讲:Eureka搭建服务注册中心
- 【Spring Cloud】Eureka服务注册中心搭建
- SpringCloud组件 & 源码剖析:Eureka服务注册方式流程全面分析
- 【Spring Cloud】Eureka服务注册中心搭建
- 学习笔记:微服务-2.spring cloud Eureka server 注册中心搭建
- 使用SpringCloud搭建微服务<三>---------使用EureKa编写服务的注册中心
- 【Spring Cloud】Eureka服务注册中心搭建
- 【Spring Cloud】Eureka服务注册中心搭建
- 03.Spring Cloud学习笔记之服务注册与服务发现组件Eureka
- Spring Cloud 服务注册与发现 EurekaServer搭建
- 【Spring Cloud】Eureka服务注册中心搭建
- 【Spring Cloud】Eureka服务注册中心搭建