职场面试题总结(47)---nacos介绍、zuul和SpringGetway基于什么架构实现的、服务启动之后如何保证服务注册到nacos服务上

564 阅读4分钟

1、 nacos介绍

Nacos是SpringCloudAlibaba架构中最重要的组件。 Nacos 是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态 DNS 服务三大功能。能够无缝对接Springcloud、Spring、Dubbo等流行框架。 在这里插入图片描述 在这里插入图片描述

nacos支持a(高可用)p(分区容错)和c(一致性)p的切换默认为ap, eureka仅支持ap,zookeeper仅支持cp。 ———————————————— 原文链接:blog.csdn.net/tsuiearl/ar…

面试分析

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公司提供的负载均衡客户端,一般应用于服务的消费方法) Ribbon 可以解决什么问题? (基于负载均衡策略进行服务调用, 所有策略都会实现IRule接口)

10、Ribbon 内置的负载策略都有哪些?

(8种,可以通过查看IRule接口的实现类进行分析)

11、@LoadBalanced的作用是什么?

(描述RestTemplate对象,用于告诉Spring框架,在使用RestTempalte进行服务调用时,这个调用过程会被一个拦截器进行拦截,然后在拦截器内部,启动负载均衡策略。)

12、我们可以自己定义负载均衡策略吗?

(可以,基于IRule接口进行策略定义,也可以参考NacosRule进行实现)

2、 服务启动之后如何保证服务注册到nacos服务上

服务调用有两种方式

1、RestTemplate实现服务间的调用。

2、OpenFeign 的服务间调用的基本方式。

Feign和RestTemplate的区别

①首先我们从代码的角度来看两者的代码,不难发现,RestTemplate设置的东西比Feign多,因为Feign使用SpringMVC的注解方便快捷的替代了RestTemplate中的URL的设置,参数的设置。

②在RestTemplate中会有两种情况,一种是在Nacos注册中心使用(注册服务名),这种来调动RestTemplate是通过路径+端口号然后经过HTTP的转发,跳转到对应的服务接口(因为在Nacos中进行配置的,所以我们是可以通过LoadBalanced来进行负载均衡),另外一种是不通过Nacos注册中心使用,我们就可以直接通过路径+端口号请求接口。

而Feign不同的是它的底层是通过动态代理来实现,当有@FeignClient注解时,@EnableFeignClient就会扫描到这个@FeignClient下的接口,创建一个动态代理的对象,而调用这个对象,就是通过我们在@FeignClient上的value值在Nacos中找到对应的服务,并在@GetMapping中获取到对应的路径和参数,最后在进行HTTP的远程调用。

原文链接:blog.csdn.net/Demolist/ar…

3、 写一个服务,如何将这个服务注册到另外一个服务上去

使用Feign来实现

使用Feign的步骤: ① 引入依赖 ② 添加@EnableFeignClients注解 ③ 编写FeignClient接口 ④ 使用FeignClient中定义的方法代替RestTemplate Feign是一种声明式的web服务客户端,底层封装了rest,通过Feign可以简化服务调用服务的操作

4、zuul和SpringGetway作为网关你会选择哪个作为网关,为什么?

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

  • gateway

  • zuul

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

5、 zuul和SpringGetway分别是基于什么架构实现的

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