OpenFeign
1.OpenFeign介绍
注意feign客户端调用的事项:
a、如果请求参数没有加上注解的话,默认采用post请求发送。
b、服务的名称命名不能够有下划线,只能使用中划线,否则会报下列的错
2.feign和openfeign的区别
a、Feign是Netflix公司写的,是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端,是SpringCloud中的第一代负载均衡客户端。
OpenFeign是SpringCloud自己研发的,在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。是SpringCloud中的第二代负载均衡客户端。
b、Feign本身不支持Spring MVC的注解,使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务
OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
Ribbon的负载均衡策略、原理和扩展
Ribbon 是 Netflix开源的基于HTTP和TCP等协议负载均衡组件
锁
Gateway
网关的核心功能特性:
-
请求路由
-
权限控制
-
限流
路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。
限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。
在SpringCloud中网关的实现包括两种:
gateway:SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
zuul :Zuul是基于Servlet的实现,属于阻塞式编程。
spring mvc
2、 DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
3、 DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
4、 HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
5、 ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
6、 View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
spring boot与spring mvc的区别是什么?
Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能。Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。
说得更简便一些:Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用开发 web 应用( SpringMVC )。然后有发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring Boot。
Spring MVC的功能
Spring MVC提供了一种轻度耦合的方式来开发web应用。
Spring Boot的功能
Spring Boot实现了自动配置,降低了项目搭建的复杂度。
众所周知Spring框架需要进行大量的配置,Spring Boot引入自动配置的概念,让项目设置变得很容易。Spring Boot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box),大部分的Spring Boot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。
Spring Boot只是承载者,辅助你简化项目搭建过程的。如果承载的是WEB项目,使用Spring MVC作为MVC框架,那么工作流程和你上面描述的是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot。
对使用者来说,换用Spring Boot以后,项目初始化方法变了,配置文件变了,另外就是不需要单独安装Tomcat这类容器服务器了,maven打出jar包直接跑起来就是个网站,但你最核心的业务逻辑实现与业务流程实现没有任何变化。
所以,用最简练的语言概括就是:
Spring 是一个“引擎”;
Spring MVC 是基于Spring的一个 MVC 框架 ;
Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。
SpringCloud - Nacos 服务注册中心面试题
-
- 1. 为什么要将服务注册到nacos
- 2. 在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的
- 3. 对于Nacos服务来讲它是如何判定服务实例的状态
- 4. 服务启动时如何找到服务启动注册配置类
- 5. 服务消费方是如何调用服务提供方的服务的
- 6. @Bean注解的作用
- 7. @Autowired注解的作用
- 8. Nacos中的负责均衡底层是如何实现的
- 9. Ribbon 是什么
- 10. Ribbon 可以解决什么问题
- 11. Ribbon 内置的负载策略都有哪些
- 12. @LoadBalanced的作用是什么
- 13. 我们可以自己定义负载均衡策略吗
- 14. 为什么使用feign
- 15. @FeignClient注解的作用是什么
- 16. Feign方式的调用,底层负载均衡是如何实现的
- 17. @EnableFeignCleints 注解的作用是什么
- 18. 何为注册中心
- 19. 注册中心的核心对象
- 20. 市面上常用注册中心
1. 为什么要将服务注册到nacos
- 为了更好的查找这些服务
2. 在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的
- 5秒心跳
3. 对于Nacos服务来讲它是如何判定服务实例的状态
- 检测心跳包,15,30
4. 服务启动时如何找到服务启动注册配置类
- NacosNamingService
5. 服务消费方是如何调用服务提供方的服务的
- RestTemplate
6. @Bean注解的作用
- 一般用于配置类内部,描述相关方法,用于告诉spring此方法的返回值要交给spring管理,bean的名字默认为方法名,假如需要指定名字可以@Bean(“bean的名字”),最多的应用场景是整合第三方的资源-对象
7. @Autowired注解的作用
- 此注解用于描述属性,构造方法,set方法等,用于告诉spring框架,按找一定的规则为属性进行DI操作,默认按属性,方法参数类型查找对应的对象,假如只找到一个,则直接注入,类型多个时还会按照属性名或方法参数名进行值的注入,假如名字也不同,就出报错.
8. Nacos中的负责均衡底层是如何实现的
- 通过Ribbon实现,Ribbon中定义了一些负载均衡算法,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务
9. Ribbon 是什么
- Netflix公司提供的负载均衡客户端,一般应用于服务的消费方法
10. Ribbon 可以解决什么问题
- 基于负载均衡策略进行服务调用, 所有策略都会实现IRule接口
11. Ribbon 内置的负载策略都有哪些
- 8种,可以通过查看IRule接口的实现类进行分析
12. @LoadBalanced的作用是什么
- 描述RestTemplate对象,用于告诉Spring框架,在使用RestTempalte进行服务调用时,这个调用过程会被一个拦截器进行拦截,然后在拦截器内部,启动负载均衡策略。
13. 我们可以自己定义负载均衡策略吗
- 可以,基于IRule接口进行策略定义,也可以参考NacosRule进行实现
14. 为什么使用feign
- 基于Feign可以更加友好的实现服务调用,简化服务消费方对服务提供方方法的调用
15. @FeignClient注解的作用是什么
- 告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类
16. Feign方式的调用,底层负载均衡是如何实现的
- Ribbon
17. @EnableFeignCleints 注解的作用是什么
- 描述配置类,例如启动类
18. 何为注册中心
- 用于记录服务信息的一个web服务,例如淘宝平台,滴滴平台,美团外卖平台,……
19. 注册中心的核心对象
- 服务提供方,服务消费方,注册中心-Registry
20. 市面上常用注册中心
- Google-Consul,Alibaba-Nacos,…