回顾第一天的提问:

随机 负载均衡randomrule 需要写

  1. //-- 在0rderservice启动类里写入这个
  2. //--java自带随机,优先级比较高
  3. @Bean
  4. public IRule randomRule(){
  5. return new RandomRule()};
  6. //-- yml文件中补充
  7. userservice:
  8. ribbon:
  9. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #

微服务和springboot和springcloud区别???

微服务是一种架构风格,大项目拆分成小项目,每个项目负责独立的业务,每个业务可以直接调用

springcloud是微服务的一站式解决方案,他依赖springboot的环境

微服务与springboot 微服务拆分成每个小项目时,它可以快速创建

springcloud使用的是哪个版本呢?

H开头的springbould,springboot是2.3系列的

springbloud有哪些核心组件?

服务注册中心 : eureka、nacos

负载均衡: Ribbon (作用:实现服务与服务之间的负载均衡调用)

服务调用:fegin(http客户端)

API网关:gateway(配置)

配置中心:nacos(nacos集群)

springmvc接收前端参数的有那些注解?

@springbody:当前端发送过来的数据为json的时候,用这个来接,封装成java对象作为参数

@Pathvarable:当我把参数作为路径发送过去时,路径接收参数

@requestEauvar:

回顾第一天所学知识:

注册中心最基本、核心作用:

服务的注册、发现、与状态监控

注册中心工作原理:

都分为服务端和客户端,都需要引入依赖

v服务引入客户端依赖,启动时,就注册到注册中心去,消费者想调用

nacos二合一软件:

注册软件、配置中心,

提供了权限管理,nacos提供了环境隔离(namespace),默认public空间,

两个注册中心区别:

eureka:按心跳机制来的:30S,可用性为主的ap架构

nacos:数据主动获取(反应快)、一致性cp为主

负载均衡 Ribbon的作用??

IRule规则

负载均衡搭建集群后,在启动类上加注解@LoadBalanced,就可以启动类

第二天开始、上午:

配置中心

也是一个单独的服务:项目上不上线,服务中心都可以管理、热服务(实时更新)、配置共享、版本管理

环境隔离:组内发微服务可以相互调用,组与组之间的微服务是隔离的

学习重点三个主键:都属于核心架构

服务调用:fegin(http客户端)

API网关:gateway(配置)

配置中心:nacos(nacos集群)

Nacos配置管理:

统一配置管理:

配置获取步骤:项目启动—>读取nacos中配置文件(bootstrap.yml)—>读取本地配置文件yml—>创建spring容器—>加载bean

1、引入nacos配置客户端依赖

2、添加bootstrap.yml配置文件,写一些配置中心的连接项(服务名称、开发环境、nacos地址、后缀名)

想要在微服务里读取配置(快速入门)??

0、在nacos注册中心在添加配置文件

1、引入配置中心的依赖

2、创建一个bootstar.yml (配置服务名称、环境配置、后缀名、链接地址)

配置热更新(自动刷新)(了解一下)

1、若用@Value注入的变量

在类上添加注解@RefreshScope就会自动热更新了;

2、创建一个配置类使用@ConfigurationProperties(prefix = “pattern”)

一定要和注册中心里的配置中心 开头一样(pattern )

(直接支持热更新)

多环境共享优先级(了解一下)

nacos中的配置(当前环境配置(服务名-yaml) > 服务名称.yaml) > 本地配置

上午说了什么?????

配置中心作用统一管理配置、热更新、版本管理

配置中心怎么用?去nacos添加config类 。然后微服务读配置,创建bootstrap.yml配置文件,读配置之前一定要把依赖引好,然后就是热更新概念 (非常重要:怎么找配置?根据命名空间,分组,服务名称、开发环境配置、配置文件的后缀名)

第二天开始、下午:

nacos作用:微服务太多,配置管理是一件很麻烦的事情,利用配置中心统一管理配置,还有热更新以及namespace对我们的配置做一些隔离..等等

nacos挂掉怎么办???

分布式架构里,建立多个用户服务就是集群,,多个注册中心也是集群(集群类)

无论什么东西给挂掉,都是集群的概念 ,按照这个回答就成:

nginx是主备架构,我们nacos搭建集群了,用三台nacos搭建的,具体是运维搭建的

nacos地址请求,(匹配到表达式)被nginx处理了(nginx只是一个中间商),提供 反向代理的服务列表,而且会有负载均衡的算法(轮询、权重、一致性、哈希)

Http客户端Fegin

Fegin的基本入门:使用步骤

1、引入依赖

2、再order-service添加注解@EnableFeignClients(basePackages = “cn.itcast.order”) ——扫描指定的包找所有标记FeignClient的接口

3、编写FeignClient接口 (编写Fegin客户端)

4、使用FeignClient中定义的方法代替RestTemplate(注入、调对应方法)// 注入到是代理对象、、// 代理对象方法被调用

((通过订单order调用user),自己的理解:浏览器访问服务器通过controller,服务访问服务通过feign,feign就是把远程调用弄的和本地调用一样,只不过是把远程服务的接口路径拷贝到自己的项目里,,想调用远程微服务fegin了,先把接口定义好 )

fegin日志:

面试官问题 有没有对Fegin进行过优化???:组件统一管理

1、fegin底层的http客户端默认使用JDK自带的,不支持连接池,性能比较差

我们可以把它换成httpClient:怎么替换(因依赖,加配置),替换成功后,就可以设置一些连接池的参数了

2、日志级别尽量使用NLL 或basic

Fegin的最佳实践???

依赖— 接口 — 配置 — 实体类

是不是nginx统一管理nacos,给后端用的,网关统一管理微服务,给前端访问后端用的? 网关就是路由转发请求 \docker有沙箱机制 微服务之间相互隔离 对外不会提供访问路径防止外界恶意攻击引发雪崩 通过网关就会安全多了\容器

统一网关gateway

为啥需要网关??因为网关功能:

全部都是对用户进行(1、身份认证和权限小件、2、服务路由和负载均衡、3、请求限流)


网关的技术实现:

SpringCloud中网关的实现包括两种:gateway、、zuul

netflix(初期包括:eyreka、feign、ribbon、zuul是基于Servlet的实现,属于阻塞式编程、hystrix),,,现在用官方的gateway比较多

搭建网关服务步骤:这是一个独立工程

1、创建新项目,然后引入网关gateway依赖和nacos依赖

2、编写启动类、配置文件(网关的端口、服务名称、注册中心地址、路由)

网关路由配置包括:

1、路由id、2、路由目标(uri)、3、路由断言(predicates)、4、路由过滤器(filters)(给路由器唯一的id,lb开头写微服务名称(这样网关也可以使用负载均衡),断言(请求进来后判断请求访问那个微服务))

网关最基本的功能就是做请求路由的(外部的请求通过网关转发到指定的微服务上)

网关到底做了什么事情??

用户微服务本身都把自己的微服务,都注册到nacos用户中心了,前端请求地址必须通过网关,网关就和自己的路由列表相匹配断言,符合路由就拉取服务列表,然后使用负载均衡,发送请求,调用微服务

(微服务之间有相互隔离机制,自己访问可以通过Fegin)(设定一个统一的访问路口,对于前端来说比较好)(统一性的功能都在网关这里做)