SpringCloud学习(二)—— 第一代核心组件 Eureka

温故而知新,可以为师矣

本文为拉钩教育java高薪培训班学习笔记与总结

 

1. 主流服务中心对比

Zookeeper
Zookeeper 它是⼀个分布式服务框架,是Apache Hadoop 的⼀个⼦项⽬,它主 要是⽤来解决分布式应 ⽤中经常遇到的⼀些数据管理问题,如:统⼀命名服务、状态同步服务、集群管理、分布式应⽤配置项的管理等。简单来说 zookeeper 本质 = 存储 + 监听通知。
Zookeeper ⽤来做服务注册中⼼,主要是因为它具有节点变更通知功能,只要客户端监听相关服务节点,服务节点的所有变更,都能及时的通知到监听客户端,这样作为调⽤⽅只要使⽤ Zookeeper 的客户端就能实现服务节点的订阅和变更通知功能了,⾮常⽅便。另外, Zookeeper 可⽤性也可以,因为只要半数以上的选举节点存活,整个集群就是可⽤的。
Eureka
Netflflix 开源,并被 Pivatal 集成到 SpringCloud 体系中,它是基于 RestfulAPI ⻛格开发的服务注册与发现组件。
Consul
Consul 是由 HashiCorp 基于 Go语⾔开发的⽀持多数据中⼼分布式⾼可⽤的服务发布和注册服务软件, 采⽤ Raft 算法保证服务的⼀致性,且⽀持健康检查。
Nacos
Nacos是⼀个更易于构建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。简单来说 Nacos 就是 注册中⼼ + 配置中⼼的组合,帮助我们解决微服务开发必会涉及到的服务注册 与发现,服务配置,服务管理等问题。 Nacos 是Spring Cloud Alibaba 核⼼组件之⼀,负责服务注册与发现,还有配置。

2. 服务注册中心组件 Eureka

Eureka 基础架构

Eureka 交互流程及原理

图来自官网

 

Eureka 通过⼼跳检测、健康检查和客户端缓存等机制,提⾼系统的灵活性、可 伸缩性和可⽤性。

 

3. Eureka应用及高可用集群

 

3.1 搭建单例Eureka Server服务注册中心

lagou-service-resume 8080-----
lagou-service-autodeliver 8090----
lagou-cloud-eureka-server 8761----
基于 Maven 构建 SpringBoot ⼯程,在 SpringBoot ⼯程之上搭建 EurekaServer服务 ( lagou-cloud-eureka-server-8761)
lagou-parent 中引⼊ Spring Cloud 依赖
Spring Cloud 是⼀个综合的项⽬,下⾯有很多⼦项⽬,⽐如 eureka⼦项⽬(版本号 1.x.x
<dependencyManagement>
    <dependencies>
     <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-dependencies</artifactId>
         <version>Greenwich.RELEASE</version>
         <type>pom</type>
         <scope>import</scope>
     </dependency>
    </dependencies>
</dependencyManagement>
当前⼯程 pom.xml 中引⼊依赖
<dependencies>
 <!--Eureka server依赖-->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
 </dependency>
</dependencies>
注意:在⽗⼯程的 pom ⽂件中⼿动引⼊ jaxb jar ,因为 Jdk9 之后默认没有加载该模
块, EurekaServer 使⽤到,所以需要⼿动导⼊,否则 EurekaServer 服务⽆法启动
⽗⼯程 pom.xml
<!--引⼊Jaxb,开始-->
<dependency>
 <groupId>com.sun.xml.bind</groupId>
 <artifactId>jaxb-core</artifactId>
 <version>2.2.11</version>
</dependency> <dependency>
 <groupId>javax.xml.bind</groupId>
 <artifactId>jaxb-api</artifactId>
</dependency> <dependency>
 <groupId>com.sun.xml.bind</groupId>
 <artifactId>jaxb-impl</artifactId>
 <version>2.2.11</version>
</dependency> <dependency>
 <groupId>org.glassfish.jaxb</groupId>
 <artifactId>jaxb-runtime</artifactId>
 <version>2.2.10-b140310.1920</version>
</dependency> <dependency>
 <groupId>javax.activation</groupId>
 <artifactId>activation</artifactId>
 <version>1.1.1</version>
</dependency>
<!--引⼊Jaxb,结束-->
application.yml
#Eureka server服务端⼝
server:
 port: 8761
spring:
 application:
  name: lagou-cloud-eureka-server # 应⽤名称,会在Eureka中作为服务的id标识(serviceId)
eureka:
 instance:
  hostname: localhost
 client:
  service-url: # 客户端与EurekaServer交互的地址,如果是集群,也需要写其它Server的地址
   defaultZone:http://${eureka.instance.hostname}:${server.port}/eureka/
 register-with-eureka: false # ⾃⼰就是服务不需要注册⾃⼰
 fetch-registry: false #⾃⼰就是服务不需要从Eureka Server获取服务信息,默认为true,置为false
在SpringBoot 启动类上,使⽤ @EnableEurekaServer 声明当前项⽬为EurekaServer服务。
执⾏启动类 LagouCloudEurekaServerApplication main 函数。
访问 http://127.0.0.1:8761 ,如果看到如下⻚⾯( Eureka注册中⼼后台),则表明 EurekaServer 发布成功。

3.2 搭建Eureka Server HA高可用集群

1 )修改本机 host 属性
由于是在个⼈计算机中进⾏测试很难模拟多主机的情况, Eureka 配置 server集群时需要执⾏ host 地址。 所以需要修改个⼈电脑中 host 地址
127.0.0.1 LagouCloudEurekaServerA
127.0.0.1 LagouCloudEurekaServerB
2 )修改 lagou-cloud-eureka-server ⼯程中的 yml 配置⽂件
 
#指定应⽤名称
spring:
 application:
  name: lagou-cloud-eureka-server
---
#第⼀个profile,后期启动spring-boot项⽬时,可通过命令参数指定
spring:
 profiles: LagouCloudEurekaServerA
server:
 port: 8761
eureka:
 instance:
  hostname: LagouCloudEurekaServerA
 client:
  register-with-eureka: true
  fetch-registry: true
  serviceUrl:
   defaultZone: http://LagouCloudEurekaServerB:8762/eureka
---
#第⼆个profile,后期启动spring-boot项⽬时,可通过命令参数指定
spring:
 profiles: LagouCloudEurekaServerB
server:
 port: 8762
eureka:
 instance:
  hostname: LagouCloudEurekaServerB
 client:
  register-with-eureka: true
  fetch-registry: true
  serviceUrl:
   defaultZone: http://LagouCloudEurekaServerA:8761/eureka
说明
  • 在⼀个实例中,把另外的实例作为了集群中的镜像节点,那么这个http://LagouCloudEurekaServerB:8762/eureka URL 中的 LagouCloudEurekaServerB 就要和其它个profifile 中的 eureka.instance.hostname 保持⼀致。
  • register-with-eureka fetch-registry 在单节点时设置为了 false, 因为只有⼀台 Eureka Server,并不需要⾃⼰注册⾃⼰,⽽现在有了集群,可以在集 群的其他节点中注册本服务
3 )启动两次该 SpringBoot 项⽬,分别使⽤两个不同的 profifiles

4 访问两个EurekaServer的管理台⻚⾯http://lagoucloudeurekaservera:8761/ 和http://lagoucloudeurekaserverb:8762/会发现注册中⼼ LAGOU-CLOUD-EUREKA-SERVER 已经有两个节点,并且 registered-replicas (相邻集群复制节点)中已经包含对⽅

3.3 微服务提供者—>注册到Eureka Server集群

1.⽗⼯程中引⼊ spring-cloud-commons 依赖
2.pom ⽂件引⼊坐标,添加 eureka client 的相关坐标
3.配置 application.yml ⽂件
application.yml 中添加 Eureka Server ⾼可⽤集群的地址及相关配置
eureka:
 client:
  serviceUrl: # eureka server的路径  
     defaultZone:http://lagoucloudeurekaservera:8761/eureka/,http://lagoucloudeurekaserverb:8762/eureka/ #把 eureka 集群中的所有 url 都填写了进来,也可以只写⼀台,因为各个 eureka server 可以同步注册表
 instance:
 #使⽤ip注册,否则会使⽤主机名注册了(此处考虑到对⽼版本的兼容,新版本经过实验都是ip)
 prefer-ip-address: true
 #⾃定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address,早期版本是ipAddress
 instance-id: ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.vers
ion@
经验:⾃定义实例显示格式,加上版本号,便于多版本管理
4. 启动类添加注解
5.启动类执⾏,在 Eureka Server 后台界⾯可以看到注册的服务实例
 

3.4 微服务消费者—>注册到Eureka Server集群

1. pom ⽂件引⼊坐标,添加 eureka client 的相关坐标
2. 配置 application.yml ⽂件
 
server:
 port: 8090
eureka:
 client:
 serviceUrl: # eureka server的路径
 defaultZone:
http://lagoucloudeurekaservera:8761/eureka/,http://lagoucloudeur
ekaserverb:8762/eureka/ #把 eureka 集群中的所有 url 都填写了进来,也可以只写⼀台,因为各个 eureka server 可以同步注册表
 instance:
 #使⽤ip注册,否则会使⽤主机名注册了(此处考虑到对⽼版本的兼容,新版本经过实验都是ip)
 prefer-ip-address: true
 #⾃定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address,早期版本是ipAddress
 instance-id: ${spring.cloud.client.ipaddress}:${spring.application.name}:${server.port}:@project.vers
ion@
spring:
 application:
  name: lagou-service-autodeliver

3.在启动类添加注解@EnableDiscoveryClient,开启服务发现

3.5 服务消费者调⽤服务提供者(通过Eureka

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值