OpenFeign

1.OpenFeign介绍

是一个Web声明式的Http客户端远程远程调用工具,底层是封装HttpClient技术,提供接口和注解形式调用。
注意feign客户端调用的事项:
a、如果请求参数没有加上注解的话,默认采用post请求发送。
b、服务的名称命名不能够有下划线,只能使用中划线,否则会报下列的错

2.feign和openfeign的区别

a、他们底层都是内置了Ribbon,去调用注册中心的服务。
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等协议负载均衡组件

Ribbon 可以用来做客户端负载均衡,调用注册中心的服务



Gateway

网关是我们服务的守门神,所有微服务的统一入口。

网关的核心功能特性

  • 请求路由

  • 权限控制

  • 限流

权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。

路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。

限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。

在SpringCloud中网关的实现包括两种:

gateway:SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
zuul :Zuul是基于Servlet的实现,属于阻塞式编程。

spring mvc


1、  首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

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 MVC是Spring的一个模块,式一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态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)续约的

  • 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,…





全部评论
终于能够区分两个的区别了
点赞 回复 分享
发布于 2022-09-28 17:10 河南

相关推荐

03-24 21:23
已编辑
郑州大学 Java
点赞 评论 收藏
分享
评论
1
11
分享

创作者周榜

更多
牛客网
牛客企业服务