服务注册与发现

mark

本篇主要讲述了微服务架构的组成,每个组件的作用是什么,重点是实现了Eureka Server和Eureka Client的实战演练,总体来说服务注册与发现就是微服务入门的基础,了解并掌握了在SpringCloud体系中的服务注册与发现的组件原理以及使用方法,由于start.spring.io的访问速度实在是不能忍,白天自己编译了整个SpringBoot的初始化器,我直接给出地址了,方便其他的朋友也可以用:

  • http://139.159.234.67:8080
  • http://zouchanglin.cn:8080 就是上面的IP地址

如果还是很慢的话,可以下载我编译好的文件( 下载地址 ),直接

1java -jar Spring-Initializr.jar

在IDEA自定义初始化器地址填写 http://localhost:8080 即可,注意这个版本是没有Web UI的,只有供三分初始化器使用的JSON串,Web UI几乎不咋用所以没考虑编译进来!

简单的微服务架构

微服务架构的基础框架/组件

服务注册与发现

服务提供了肯定要注册上来,并且把自己的地址信息表现出来,然后服务的调用方才能从这个组件上发现目标服务

服务网关 Service GateWay

服务不但要内部能访问到,而且肯定有一部分服务需要暴露给外界,所以这就是服务网关的通俗理解,服务网关是连接内外的大门,网关会屏蔽后台服务的一些细节,比如后台的程序要升级呀对外用户是无感知的,还有路由的功能,可以将外部的请求反向路由到内部的某个具体的微服务,还可以做一些限流和容错的功能,因为所有请求都会经过网关,所以可以控制流量,监控和日志也可以在这个里完成,用户认证、授权、反爬虫之类都是在服务网关完成的,作用是非常巨大的

后端通用服务

也称为中间层服务 Middle Tier Service,把自己注册到服务注册表

前端服务

也成为边缘服务 Edge Servcice,从服务注册于发现组件中调用自己想要的后端服务

mark

微服务是一种架构,具体实现主要分为阿里系和SpringCloud系,阿里系主要使用Dubbo做服务治理,使用ZK做服务注册中心,在17年左右Dubbo死而复生之后就疯狂的更新,很多公司也在用Dubbo做服务治理;拎一个系列那就是SpringCloud系列,也就是SpringCloud全家桶,Spring Cloud是一个开发工具集,包含多个子项目,利用SpringBoot的开发便利,主要是对Netflix开源组件的进一步封装,基本囊括了微服务所需要的绝大部分功能组件,Spring Cloud简化了分布式应用的开发,需要更加深刻的理解分布式架构的特点!

服务注册与发现

SpringCloud Eureka,基于Netflix Eureka做的二次封装,主要有两个组件构成

  • Eureka Server 注册中心
  • Eureka Client 服务注册

服务端就是供服务注册的服务器,客户端用来简化与服务器的交互,作为轮询负载均衡器,并提供服务的自动切换功能,客户端连接到服务注册中心并维持心跳连接,Eureka就能够监控系统中的服务是否正常工作

Eureka Server

Eureka这个单词的意思就是找到了,有了的意思

首先是吧SpringBoot和SpringCloud的版本对应起来,否则可能会造成很多意料之外的错误,比如eureka注册了结果找不到服务类啊,比如某些Jar导入不进来啊,等等这些错误,下图是对应关系,SpringCloud的版本名称是按照伦敦地铁站的名字命名的:

mark

我这里选择的是Finchley的版本

mark

接下来需要开启SpringBoot项目中的Eureka Server

只需要在启动类上注解 @EnableEurekaServer 即可,同时,一个Eureka作为Server也作为一个Client,所以需要自己注册自己,需要在配置文件中添加图如下配置(添加spring application name就是为了让注册实例的Name不是UNKOWN):

1eureka:
2  client:
3    service-url:
4      defaultZone: http://localhost:8080/eureka
5
6spring:
7  application:
8    name: eureka

启动之后访问localhost:8080即可看到

mark

但是作为注册中心,我又不想在页面上把它当作一个注册实例,那么添加如下配置

1eureka:
2  client:
3    service-url:
4      defaultZone: http://localhost:8080/eureka
5    register-with-eureka: false

因为Eureka的默认端口是8761,所以这里也改一改

 1eureka:
 2  client:
 3    service-url:
 4      defaultZone: http://localhost:8761/eureka
 5    register-with-eureka: false
 6spring:
 7  application:
 8    name: eureka
 9    
10server:
11  port: 8761

Eureka Client

首先通过SpringBoot创建一个工程,选择Eureka Discovery Client,我试过目前最新版只有spring-boot-starter-web也勾上才可以,不然直接启动失败!

mark

接下来在启动类配置@EnableDiscoveryClient,代表这是一个Eureka Client,然后配置文件如下

1eureka:
2  client:
3    service-url:
4      defaultZone: http://localhost:8761/eureka/
5
6spring:
7  application:
8    name: client-01

打开我们之前配置的Eureka Server,因为Eureka Server的地址是 http://localhost:8761/eureka/ 所以在配置的时候需要配置这个地址,因为你要像Eureka Server去注册,然后给自己起个名字叫做 client-01

接下来先开启Eureka Server,我为了方便启动,直接打成了Jar包,并做成了脚本放在桌面上!

然后启动client-01,然后打开localhost:8761 就看到了Eureka Client

mark

mark

如果频繁重启Client端,注意到会有这样的问题

mark

Eureka Server 和 Eureka Client采用的是心跳检测连接,Server端不会停的检查Client是否存活,会在一定的时间统计Client端的上线率,这个上线率就是一个比例,当低于某个比例的时候就会爆出这样的警告,意思就是Client的上线率太低了,可能某个时间点就不知道你是上线还是下线,那么我就当作你是上线的,俗话讲就叫宁可信其有,不可信其无,实际上是它的一种自我保护模式,在开发环境可以把它关掉,避免显示的是在线但实际上却不在线的情况,所以在开发环境最好是把这种模式给关掉!现在来到Eureka Server端,加入配置:

 1eureka:
 2  client:
 3    service-url:
 4      defaultZone: http://localhost:8761/eureka
 5    register-with-eureka: false
 6  server:
 7    enable-self-preservation: false # 关闭这种自我保护机制
 8spring:
 9  application:
10    name: eureka
11
12server:
13  port: 8761

记住生成环境不要做这样的配置,在关闭这种机制之后呢,又会出现这样的警告,无需关闭,它就是告诉我们不建议关闭这个机制,但是开发环境就这样配置很有必要的!

mark