回顾第一天的提问:
随机 负载均衡randomrule 需要写
//-- 在0rderservice启动类里写入这个
//--java自带随机,优先级比较高
@Bean
public IRule randomRule(){
return new RandomRule()};
//-- yml文件中补充
userservice:
ribbon:
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)(设定一个统一的访问路口,对于前端来说比较好)(统一性的功能都在网关这里做)