1、一般原理2、主流服务中心对比 二、Eureka
1、基础架构2、Eureka Server3、Eureka Client 三、Eureka集群
1、搭载高可用集群2、微服务注册到Eureka集群上3、消费者通过Eureka调用提供者
一、服务注册中心服务注册中心本质是为了解耦服务提供者和服务消费者 1、一般原理
分布式微服务架构中,注册中心用于存储服务提供者地址信息、服务发布相关的属性信息。消费者通过主动查询和被动通知的方式获取服务提供者的地址信息,而不再需要通过硬编码方式得到提供者的地址信息。消费者只需要知道当前系统发布的服务,而不需要知道服务具体存在的位置。这就是透明化路由注册中心也需要完成服务提供者的健康监控,当发现服务提供者失效时需要及时剔除。 2、主流服务中心对比
Zookeeper
Zookeeper是一份分布式服务框架,是Apache Hadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的数据管理问题,比如:统一命名服务、状态同步状态、集群管理、分布式应用配置项等本质:存储+监听通知znode是Zookeeper的核心,主要是因为它具有节点变更通知功能,只有客户端监听相关服务节点,服务节点的所有变更,都能及时的通知到监听客户端,这样作为调用方只要使用了Zookeeper客户端就能实现服务节点的订阅和变更通知功能,十分便利。Zookeeper集群中,只要半数以上选举点存活,整个集权就可以使用。通常布置奇数个节点,比如3个 Eureka
由Netflix开源,并被集成到Spring Cloud体系中,他是基于RestfulAPI风格开发的服务注册与发现组件。是Spring Cloud第一代的注册中心 Consul
基于Go语言开发的支持多数据中心分布式高可用的服务发布和注册服务软件,采用Raft算法保证服务的一致性,并且支持健康检查 Nacos
一个更易于构建在云原生应用的动态服务发现、配置管理和服务管理平台,即他是注册中心+配置中心的组合,帮助解决微服务开发必会涉及到的服务注册与发现,服务配置,服务管理等问题。是Spring Cloud Alibaba核心组件之一,负责服务注册与发现,还有配置。
组件名 语言 CAP 对外暴漏接口
CAP
P : 分区容错性(一定要满足)A :高可用C:数据一致性目前CAP不能同时满足三个,只能是AP或者CP 二、Eureka 1、基础架构
Eureka 包含两个组件
Eureka Server:服务的注册中心,提供服务的发现能力。保存已经注册的Eureka Client的各种信息,以提供其他Eureka Client获取。其需要单独创建工程,引入服务端的jar包,启动项目后,可以通过浏览器登录管理界面Eureka Client:Java客户端,注册到注册中心Eureka Server中,以便其他的客户端便于从Eureka Server中获取该服务信息,然后进行调用。
2、Eureka Server
在Spring Boot工程上搭建Eureka Server服务
- 前提需要在综合项目的pom.xml中加入依赖管理
org.springframework.cloud spring-cloud-dependenciesGreenwich.RELEASE pom import
- 在Eureka Server子项目中的pom.xml引入Eureka Server依赖
org.springframework.cloud spring-cloud-starter-netflix-eurekaserver
- 由于Eureka Server需要使用jaxb,并且由于Jdk9之后不再默认加载jaxb,故如果Jdk版本高于9,需要引入jaxb依赖。可以在Eureka Server子模块中引入,也可以在父类引入
com.sun.xml.bind jaxb-core2.2.11 javax.xml.bind jaxb-apicom.sun.xml.bind jaxb-impl2.2.11 org.glassfish.jaxb jaxb-runtime2.2.10-b140310.1920 javax.activation activation1.1.1
- 开发配置文件,在 src/main/resources 中新建 application.yml ,添加如下内容
#Eureka server服务端⼝ server: port: 8761 spring: application: name: XXX # 应⽤名称,会在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 声明当前项目为Eureka Server服务
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class,args); } }
- 执行启动类EurekaServerApplication的main函数通过浏览器访问 http://localhost:8761 ,如果看到如下页面(Eureka注册中心后台),则说明Eureka Server发布成功
搭建Eureka Client服务,服务提供者和服务消费者均是一样配置
- 由于Eureka Server和Eureka Client都是同一个Spring Cloud综合项目的子项目,故server配置时候已经在父项目中添加的依赖管理。父工程或本项目中引入依赖 spring-cloud-commons
org.springframework.cloud spring-cloud-commons
- 在Eureka Client的 pom.xml 添加Eureka Client相关依赖
org.springframework.cloud spring-cloud-starter-netflix-eurekaclient
- 配置文件修改,在 src/main/resources 中新建 application.yml ,添加如下内容
#配置端口号 server: port: 8090 eureka: client: serviceUrl: # eureka server的路径 defaultZone: http://XXX #把 eureka 集群中的所有 url 都填写了进来,也可以只写⼀台,因为各个 eureka server 可以同步注册表(例如:http://lagoucloudeurekaservera:8761/eureka/,http://lagoucloudeurekaserverb:8762/eureka/) instance: #使⽤ip注册,否则会使⽤主机名注册了 prefer-ip-address: true #⾃定义实例显示格式,加上版本号,便于多版本管理,注意是ip-address,早期版本是ipAddress instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@ #经验而谈,自定义实例显示格式,加上版本号@project.version@,便于多版本管理 spring: application: name: XXX # 应⽤名称,会在Eureka中作为服务的id标识(serviceId)
- 启动类添加注解:在main函数的类上添加注解 @EnableDiscoveryClient 或 @EnableEurekaClient
从 Spring Cloud Edgware 版本开始, @EnableDiscoveryClient 或
@EnableEurekaClient 可省略。只需加 上相关依赖,并进⾏相应配置,即可将
微服务注册到服务发现组件上@EnableDiscoveryClient 和 @EnableEurekaClient ⼆者的功能是⼀样的。但是如果选⽤的是eureka服务器,那么就推荐 @EnableEurekaClient ,如果是其
他的注册中⼼,那么推荐使⽤ @EnableDiscoveryClient ,考虑到通⽤性,后期
我们可以使⽤ @EnableDiscoveryClient
- 启动类执行后,在Eureka Server后台界面可以看到注册的实例,其他的微服务可以调用
通常生产中,实现点对点的部署方式(P2P)在配置yml文件时,EurekaServerA和EurekaServerB分别把对方看作时server,自身作为client,注册到对方上。 2、微服务注册到Eureka集群上
配置application.yml时,可以把 eureka 集群中的所有 url 都填写上,也
可以只写⼀台,因为各个 eureka server 可以同步注册表从从Spring Cloud Edgware版本开始,@EnableDiscoveryClient 或
@EnableEurekaClient 可省略。只需加 上相关依赖,并进⾏相应配置,即可将微服务注册到服务发现组件上。
3、消费者通过Eureka调用提供者
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)