Eureka服务注册中心
1.什么是Eureka?
- Netflix在涉及Eureka时,遵循的就是API原则.
- Eureka是Netflix的有个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发现,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo的注册中心,比如Zookeeper.
2.原理理解
- Springcloud 封装了Netflix公司开发的Eureka模块来实现服务注册与发现 (对比Zookeeper).
- Eureka采用了C-S的架构设计,EurekaServer作为服务注册功能的服务器,他是服务注册中心.
- 而系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳连接。这样系统的维护人员就可以通过EurekaServer来监控系统中各个微服务是否正常运行,Springcloud
的一些其他模块 (比如Zuul) 就可以通过EurekaServer来发现系统中的其他微服务,并执行相关的逻辑.
与Dubbo对比
- Eureka 包含两个组件:Eureka Server 和 Eureka Client.
- Eureka Server 提供服务注册,各个节点启动后,回在EurekaServer中进行注册,这样Eureka
Server中的服务注册表中将会储存所有课用服务节点的信息,服务节点的信息可以在界面中直观的看到. - Eureka Client是一个Java客户端,用于简化EurekaServer的交互,客户端同时也具备一个内置的,使用轮询负载算法的负载均衡器。在应用启动后,将会向EurekaServer发送心跳(默认周期为30秒) 。如果Eureka Server在多个心跳周期内没有接收到某个节点的心EurekaServer将会从服务注册表中把这个服务节点移除掉(默认周期为90s).
3.三大角色
- Eureka Server:提供服务的注册与发现 Service
- Provider:服务生产方,将自身服务注册到Eureka中,从而使服务消费方能狗找到 Service
- Consumer:服务消费方,从Eureka中获取注册服务列表,从而找到消费服务
4.Eureka构建使用的步骤
4.1 EurekaServer的使用
-
导入依赖:
<!--Eureka服务--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.6.RELEASE</version> </dependency>
-
编写配置:
在application.yaml配置:
#eureka配置
eureka:
instance:
hostname: eureka7001.com #Eureka服务端的实例名称(localhost),通过修改hosts文件可以为localhost起别名,来进行域名映射
client:
register-with-eureka: false #是否向Eureka注册自己
fetch-registry: false #表示自己为注册中心
service-url: #默认的eureka注册中心地址:"http://localhost:8761/eureka/"
#单机: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #自己的http://localhost:7001/eureka/
#集群(关联):
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
- 开启功能:
主启动类添加注解@EnableEurekaServer开启功能!
完成,一个注册中心的使用完成!
4.2 EurekaClient的使用
注意:无论是消费者(consumer)还是提供者(provider)对于Server都是Client)
-
导入依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency>
-
编写配置:
因为是服务提供者,肯定除了eureka的相关配置还需要配置自身服务需要的一些
#Spring的配置
spring:
application:
name: SpringCloud-provider-dept #负载均衡根据这个名称来访问
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
#Eureka的配置,将服务注册到注册中心Eureka Server当中
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #指定注册中心的地址
instance:
instance-id: springcloud-provider-dept8001 #服务提供者描述
#info配置
info:
app.name: SQX-SpringCloud
company.name: Alibaba
- 开启功能:
需要在主启动类当中添加煮酒注解@EnableEurekaClient
完成,一个服务提供者在eureka的配置完成!(消费者类似)
5.Eureka的一些配置
对于Eureka的一些详细的配置这里需要具体的介绍一下!
首先让我们开启一个3个相互关联的注册中心(集群),并注册进去一个服务!去访问 eureka7001.com:7001就是如图
我们看到了,图上我分成了4个小块分别标注为1,2,3,4我们来说一下分别是什么,和它是如何配置的?
- 模块一:这里是当前注册中心关联的注册中心,具体配置是如下:
这么做的目的是然多个注册中心相互关联,形成一个所谓的集群,避免的就是如果所有服务注册在一个注册中心当中,如果注册中心崩了怎么办?形成集群后,服务会注册在集群中的每个注册中心当中,即使一个崩了,其他的仍然拥有全部的服务! - 模块二:这里是注册在注册中心的服务名字,具体的配置方式:
如果存在多个相同的服务就是指相同的服务名,负载均衡就是通过服务名字调用,通过策略来确定意相同的服务应该调用哪个。 - 模块三:此处是对每一个服务的简单描述,如图
用简单的描述去标注当前服务是干什么的! - 模块四:这是对当前服务的一个扩充的地址,如果需要,可以在这个地址当中去配置当前服务的一些信息,比如当前服务的开发者是谁,哪个公司开发的等,具体的使用如图:首先是需要导入一个依赖
然后去配置文件通过如下配置以<K,V>的形式即可
配置完成后,访问即可看到具体的信息如下:
我们可以看到,我们的访问地址是localhost,我们实际开发的时候去看别人的服务信息,肯定不会是localhost呀,所以要改为真实的ip地址,我们如何开启呢?很简单,只需要在配置中使用prefer-ip-address: false 即可
6.Eureka对比zookeeper
同样是注册中心,他们之间有什么差异 !
1.遵循的原则:
- Eureka: AP原则(可用性和容错性)
- Zookeeper: CP原则(一致性和容错性)
2.与服务的通信方式
- Eureka: Restful风格的http通信方式
- Zookeeper: Dubbo一个RPC通信框架(RPC远程过程调用的通讯方式)
3.注册中心的使用方式
- Eureka: 通过相关配置去配置自己的注册中心!
- Zookeeper: 去第三方下载,下载后启动bin目录下的zkclient.cmd命令
4.服务消费者调用服务提供者的方式
- Eureka: 服务提供者提供服务到注册中心,在消费者中配置注册中心的地址,然后消费者通过RestTemplate去调用服务提供者所提供的服务,如图
- Zookeeper: 在服务提供者提供服务到注册中心后,在服务具体方法标注@Service的注解用于表示当前是个服务,(注意:是dubbo包下的注解而非Spring包下的!),然后@Component注解,将其注入到IOC容器当中,然后消费者同样通过@Service标注自己是个服务后,在其本身可以同@Rederence去获取服务提供者,然后调用即可!如图:
以上就是它们之间的一些区别!
完成,上述就是当前对于Eureka的知识总结!