SpringCloud微服务项目实战,服务注册与发现,带有面试题
最近项目的事真是搞的焦头乱额,好多天没更新文章了。今天抽空继续前面的SpringCloud微服务实战系列项目,以后我会基于面试的一些问题及原理展开,再深入到项目实战。希望小伙伴们看完能有更大的收获,不仅面试的基础问题都知道了,再跟着实战练练手,就能更加深入的掌握,对找工作也会有很大的帮助。
服务注册与发现(面试题)
1、什么是服务的注册与发现?
服务的注册与发现,在任何RPC远程调用框架中,都会有一个注册中心。用来存放服务地址相关信息。首先我们得启动注册中心的服务,在注册中心正常运行时,当提供者服务器启动的时候,就会把当前自已服务器的信息,比如服务地址通讯地址等以别名方式注册到注册中心上。消费者以该服务别名的方式去注册中心上获取到实际的服务通讯地址,然后在实现本地rpc远程调用。
目前服务发现的解决方案有Eureka,Consul,Zookeeper等等。SpringCloud默认使用eureka作为服务注册中心。
2,介绍你对Eureka的理解?
Eureka是Netfix的一个子模块,也是核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常的重要,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务了,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。
Eureka采用了C-S的设计架构。Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka Client连接到Eureka Server并维持心跳连接。这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行。
3, Eureka服务注册流程?
1),服务启动时会生成服务的基本信息对象InstanceInfo,然后在启动时注册到服务治理中心。
2),服务注册完成后,会从服务治理中心拉取所有的服务信息,缓存在本地。
3),之后服务会30s(可配置)发送一个心跳信息,续约服务。
4),如果服务治理中心在90s内没有收到一个服务的续约,就会认为服务已经挂了,会把服务注册信息删掉。
5),服务停止前,会主动发送一个停止请求,服务治理中心会删除这个服务的信息。
6),如果Eureka Server收到的心跳包不足正常值的85%(可配置)就会进入自我保护模式,在这种模式下,Eureka Server不会删除任何服务信息。
原理总结:
- Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址;
- 提供者:启动后向Eureka注册自己信息(地址,提供什么服务);
- 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新;
- 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态;
服务注册与发现实战
接着上次的项目继续开始实战,我们先创建两个服务模块,创建完成如下:
然后在pom里添加Eureka的Service和Client等依赖。
父级pom依赖
customer和order模块的pom依赖
为这个两个服务添加启动类和配置:
customer模块的启动类:
customer模块的yml配置:
order模块的启动类:
order模块的yml配置:
配置完成先启动Eureka服务,然后分别启动其他两个服务,检查注册中心:
两个服务已全部注册成功,基础已搭建完成。接着写一个http请求的服务提供与消费调用。首先在Customer里写一个提供者服务,如下:
并在启动类里添加feign注解。
然后在Order模块写一个消费者服务:
如果提供者调用失败处理:
再在order里写一个http请求的测试接口:
还需要在order模块的启动类里添加feign注解:
到此处,代码已写完了,启动customer和order服务准备测试。
测试结果,完美实现了服务注册与调用。
下期预期:SpringCloud微服务实战系列,微服务调用、网关搭建配置详解。