天天看点

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

哈喽各位同学们大家好呀,今天是开发者学院中课程“Spring Cloud微服务架构设计与开发实战”的章节三的“Spring Cloud微服务注册与发现 ”干货总结~是一起学习新课程吧!

课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇

课程名称:Spring Cloud微服务注册与发现 

课程地址:

https://developer.aliyun.com/learning/course/60/detail/1095

图谱名称:Alibaba Java 技术图谱

图谱地址:

https://developer.aliyun.com/graph/java

Spring Cloud微服务注册与发现 

一、Spring Cloud服务注册与发现 

对于微服务业务需要先进行拆分,微服务实例部署数量不固定,可以弹性伸缩,与传统架构不一样,比较靠拢云计算、云原生。 

(一)服务注册与发现 

解决大规模服务集群的注册和发现问题,主要为了方便客户端调用。比如开发一个微服务是订单服务,开始只启用一台服务器,客户端和客户端直接调用微服务就可以了。但如果启用两台以上,客户端直接写多台服务的IP地址做轮巡是不行的,因为如果遇到类似双11促销场景,需要增加很多台服务,且是弹性不定数量增加,这时候最好有一种方案能够解决这个问题,把客户端和服务集群结耦。 

结耦里面很重要的就是注册中心,注册中心可以帮助管理服务,当只有一个、两个服务的时候,客户端可以直接和服务建立连接,当服务数量不固定,且伸缩范围很大时,需要一个专门的机构帮助管理这些服务。 

服务注册与发现总结: 

1. 大规模微服务集群架构; 

2. 许多服务实例; 

3. 客户端要找到自己调用的服务; 

4. 新服务上线; 

5. 某个服务宕机,下线; 

6. 实时监控服务的状态。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

(二)Spring Cloud Eureka服务发现与注册 

在微服务架构体系里, Netflix公司贡献了其中一个很重要的项目叫Eureka,主要解决服务注册中心的问题。在大数据里面,有同类型的产品ZooKeeper,Spring Cloud通过扩展组件也可以进行集成。 

本节课主要讲实战开发,建立注册中心以后,怎么样把微服务注册进去,怎么让注册中心管理服务。总结: 

1. Netflix公司开源的项目, 

2. Eureka:注册中心, 

3. 一个基于 REST 的中心服务,管理服务, 

4. 实现云端的服务注册和服务发现。 

5. Eureka组件组成:Eureka服务器和Eureka客户端; 

6. 竞争对手ZooKeeper; 

7. 服务发现模块(Eureka)是Netflix的核心; 

8. Spring Cloud Netflix提供的简化开发模板; 

9. 直接使用spring boot,创建项目; 

10. 添加 @ EnableEurekaServer开发注册服务中心。 

(三)Spring Cloud 架构图 

下图所示,是微服务架构图,有注册中心,客户端微服务上线注册,微服务实例数量是动态的,有可能是一台,也有可能是很多台,灵活弹性根据客户端的压力做弹性伸缩。 

客户端调用时不是直接找微服务,先找注册中心,有哪些好的微服务,有哪些匹配的,每次搜索最新的报表,然后调用。客户端也可以按照各种负载均衡的策略去调用,或者结合一些负责运行的算法灵活调度。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

二、Eureka注册中心开发实战 

(一)Spring Eureka注册中心 

1. 创建Eureka服务注册中心项目;  

2. 添加@ EnableEurekaServer;  

3. 将spring boot应用改造成Eureka服务注册中心; 

4. application.properties增加配置;  

5. 打包项目;  

6. 运行;  

7. 测试页面;  

8. 参考

https://spring.io/guides/gs/service-

registration-and-discovery/。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

(二)application.properties配置 

• server.port=8761; 

• eureka.client.register-with-eureka=false; 

• eureka.client.fetch-registry=false; 

• eureka.client.serviceUrl.defaultZone=http://localhost:${ser 

ver.port}/eureka/; 

• logging.level.com.netflix.eureka=OFF; 

• logging.level.com.netflix.discovery=OFF; 

(三)创建Spring Eureka服务项目 

演示部分: 

下图所示,是正常运行界面。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

这里还没有服务实例,下面演示开发微服务,再把微服务注册进来。打开Eclipse开发工具,新建项目,插件里面会有New Spring Sttarter Project模板,Name 栏加入Eureka,下面直接配公司的域名就行,Group 栏输入com.alibaba,点击下一步,如下图所示: 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

Available栏输入Eureka,加入注册中心、服务端,为了开发调试再加入dev,用于加载动态调试工具,做动态调试服务。演示版本是2.4.1,再下一步: 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

下一步: 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

。 

这里面会生成项目,Maven会自动来去拉包,第一次拉包时间比较久,网络好应该会快一点,把Maven仓库改成阿里或其他公司,国内应该有很多Maven仓库镜像。 

先来改配置文件,这里关键是加注解,启用EurekaServer, EurekaServer自动跟进配置,制作在某个端口上,包括注册中心的界面,会提供注册地址,在之前的例子上是提供Rest API, 供客户端注册。 

第一步是,启动@ EnableEurekaServer,使服务器具备注册中心的能力,这一步非常重要。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

接下配一下配置文件,配置文件有几个核心参数,程序名和端口,程序名输入EurekaServer。端口不配的话就是默认的8080,因为官方例子是8761,我们也配置8761。还需要配置Eureka的注册客户端,如下图所示:“http://localhost:8761/eureka”是注册中心的地址,给客户端注册和查找用的。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

接下来启动程序,直接右键,选Run As ,有两种启动方式,1.jave Application,2.Spring Boot APP,两种都可以启动。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

启动成功之后,打开浏览器,输入http://localhost:8761回车,出现Eureka注册中心的界面。里面一有个服务实例,这个实例默认没有关掉,自己可以往自己中心的注册,正常并不需要,自己往自己中心的注册实际是多余的。在比较底的版本会显示出错。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

可以配置关闭上面的服务实例,输入“eureka.client.fetch-registry=false”,“eureka.client.register-with-eurka=falsr”。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

重新加载后,打开eureka界面,可以看到,自己往自己中心注册的实例就没有了。 

开发者学堂课程干货总结——Spring Cloud微服务架构设计与开发实战(二十三)

三、Eureka底层原理与源码分析 

(一)Netflix Eureka源码 

•Eureka 官方源码; 

https://github.com/Netflix/eureka

; 

•Spring Cloud Netflix 适配 Eureka 的代码; 

https://github.com/spring-cloud/spring-cloud-netflix

(二)Eureka源码分析 

Eureka通信基于Http(s)协议的框架 

1. 纯正的 servlet 应用,需构建成war包部署; 

2. 使用了 框架实现自身的 HTTP接口; 

3. peer之间的同步与服务的注册全部通过 HTTP 协议实现; 

4. 定时任务(发送 、定时清理过期服务、节点同步等)通过 JDK 自带的 Timer 实现; 

5. 内存缓存使用Google的 包实现; 

(三)服务实例Instance的状态 

1. Up; 

2. Down; 

3. Starting; 

4. Out_Of_Service; 

5. Unknown。