一,什么是注册中心
服务注册中心 :Service Registry
注册中心可以说是微服务架构中的” 通讯录 “,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。 服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机IP 和提供服务 的 Port,以及暴露服务自身状态以及访问协议等信息。 服务实例请求注册中心获取所依赖服务信息。服务实例通过注册中心,获取到注册到其中的 服务实例的信息,通过这些信息去请求它们提供的服务。二,注册中心有什么作用
服务注册中心(下称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心一般包含如下几个功能: 1. 服务发现:- 服务注册/反注册:保存服务提供者和服务调用者的信息
- 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,最好有实时推送的功能
- 服务路由(可选):具有筛选整合服务提供者的能力。
- 配置订阅:服务提供者和服务调用者订阅微服务相关的配置
- 配置下发:主动将配置推送给服务提供者和服务调用者
- 检测服务提供者的健康情况
三,常见注册中心
- Zookeeper
- Eureka
- Consul
- Nacos
四,Eureka 的概述
4.1 Eureka 的基础知识
Eureka是 Netfix 开发的服务发现框架, SpringCloud 将它集成在自己的子项目 spring-cloud-netfix中,实现 SpringCloud 的服务发现功能。 上图简要描述了 Eureka 的基本架构,由 3 个角色组成: 1 、 Eureka Server- 提供服务注册和发现
- 服务提供方
- 将自身服务注册到Eureka,从而使服务消费方能够找到
- 服务消费方
- 从Eureka获取注册服务列表,从而能够消费服务
4.2 Eureka的交互流程与原理
图是来自Eureka官方的架构图,大致描述了Eureka集群的工作过程。图中包含的组件非常多,可能比较难以理解,我们用通俗易懂的语言解释一下:
- Application Service 相当于本书中的服务提供者,Application Client相当于服务消费者;
- Make Remote Call,可以简单理解为调用RESTful API;
- us-east-1c、us-east-1d等都是zone,它们都属于us-east-1这个region;
由图可知,Eureka包含两个组件:Eureka Server 和 Eureka Client,它们的作用如下:
- Eureka Client是一个Java客户端,用于简化与Eureka Server的交互;
- Eureka Server提供服务发现的能力,各个微服务启动时,会通过Eureka Client向Eureka Server 进行注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息;
- 微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认90秒);
- 每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注册表的同步;
- Eureka Client会缓存Eureka Server中的信息。即使所有的Eureka Server节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者。
五,注册中心搭建
我前面已经搭建了一个微服务,不过是服务消费方直接硬编码请求服务提供方。
springCloud01: springCloud01-20211225 练习springCloudhttps://gitee.com/vegetarian/spring-cloud01.git下面使用注册中心,来操作一下。
5.1 搭建Eureka服务中心
1,搭建eurekaServer 模块
2,引入eureka 依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
3,设置eureka 配置文件
server:
port: 9003
spring:
application:
name: eureka-order
eureka:
instance:
hostname: localhost
client:
registerWithEureka : false # 是否将自己注册到注册中心
fetchRegistry : false # 是否从eureka中获取注册信息
serviceUrl : #配置暴露给eureka client 的请求地址
defaultZone : http://${eureka.instance.hostname}:${server.port}/eureka/
4,配置eureka 启动类
package com.zjk.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
@EnableEurekaServer : 激活Eureka Server端配置
然后启动eurekaServer 模块,在浏览器访问配置文件的端口,出现下面页面即是访问成功!