SpringCloud微服务02-微服务拆分-注册中心-OpenFeign-网关路由-网关登录校验-配置管理

一、认识微服务

1.单体架构

当高并发功能和重要功能都在同一个Tomcat服务器,当高并发的时候,重要的功能接口就会受到影响。

2.微服务

跨服务就需要一些技术栈

3.SpringCloud

二、微服务拆分

1.熟悉黑马商场

2.服务拆分原则

什么时候用微服务,就可以举例子比亚迪的网上购物收到投诉,就可以开发线上购物平台,这种有资金,目标明确,不存在试错。

例如跟商品的服务都只在一个微服务,内部关联,且更新时只会修改该微服务内部代码。核心业务不会调用其他微服务。

3.拆分服务

每个微服务是一个Module

拆分服务就是将各自服务所需的dto,vo,po,query实体,mapper,controller,service,配置类,启动项放到一个module或project中去。

4.远程调用

查询购物车时,需要查询商品的信息

通过网络调用,向商品微服务发送http请求,获取商品信息

在购物车service需要商品信息中:用RestTemplate发送请求

5.服务治理

使用RestTemplate存在很多问题,负载均衡你可能要访问不同的商品服务ip

①注册中心

服务启动的时候应该都向注册中心进行注册,告诉自己的ip和功能,还要与注册中心形成一个心跳,告诉自己的情况,如果宕机或者什么就会删除注册。调用者就可以通过负载均衡选择一个进行调用。

②nacos注册中心

在docker部署好后nacos
可以访问:

http://192.168.253.128:8848/nacos

输入nacos,密码nacos 即可进行管理服务

③服务注册

这样启动后就会注册

④服务发现

一二步与服务注册一致

nacos按服务名称进行管理,只需要传入名称就可以进行调用

6.OpenFeign

①快速入门

太复杂

这里个接口不用实现

②连接池

OpenFeign底层就是跟之前步骤类似发送请求,但它使用HttoURL性能不好,就可以更改请求方式

③最佳实践

可能别的服务也会使用相同的OpenFeign,避免重复编写以及便于维护

方案一:耦合度低,比较复杂

方案二:代码耦合度增加

聚合结构适合采用方案二

④日志

三、网关

路由是判断请求需要什么微服务,转发就是把请求给具体的微服务,身份校验检查访问的信息

网关不是SpringMVC框架下的

1.网关路由

①快速入门

网关也是一个微服务

要使用网关需要创建一个新服务并配置依赖:


②路由属性

路由断言:

fiflters:

对某一个服务请求头进行过滤

如果对所有服务请求过滤就放在外面

2.网关登录校验

所以我们如果要进行JWT令牌校验就需要在自定义一个Filter放入PRE中,并将用户信息放到请求头中

要想能够在各个微服务中拿到当前用户,首先得登录校验并将获得用户信息保存到请求头中,之后common包中的拦截器将请求头中的信息保存到ThreadLocal中,每个微服务都会依赖common包并加载其中的配置项,然后想要在微服务之间传递还需要将用户信息放到OpenFeign中的请求头中。

①自定义过滤器

在网关中定义filter类实现GlobalFilter和Ordered,后者是定义执行顺序的。NettyRoutingFilter设置的是最大的数代表最后执行。

对于指定路由过滤器GatewayFilter来说,需要时才看

②实现登录校验

jwt属性配置:auth中excludePaths就是不需要进行jwt验证的请求路径

自定义Filter类

这里antPathMatcher是来匹配路径的,因为配置中写的路径是包含通配符的

③网关传递用户

对上下文进行修改,对请求头进行修改

定义拦截器:拦截到请求后将用户信息传入UserContext这个静态类就是一个ThreadLocal

使拦截器生效的配置类:

但是要微服务都能用上还需要微服务启动类能够扫描到这个配置类

不同包扫描不到配置类想要生效,需要在META-INF中一个文件中去定义,这里spring.factories是老版本也可以使用

网关不是SpringMVC框架下的,但是网关服务也引入了common也就会加载这个配置类

加上这个注释,这个类只有SpringMVC具有所以才会生效

④OpenFeign传递用户

每个从网关到微服务,之所以能拿到用户信息,是因为网关传递了用户信息到请求头中,因为每个微服务可以理解为都会使用拦截器去获得这个用户信息。
但是微服务之间,也是发送请求来调用不同微服务的接口,这个请求没有携带用户信息的请求头,所以获取不到用户信息

api模块中,config包中添加:

并在使用OpenFeign的微服务启动类的OpenFeign注解中添加启动这个配置类选项

3.配置管理

nacos具备这个功能

①配置共享

我这里遇到了一个很蠢的问题,url它显示不完全,需要在后面加空格才行。


②配置热更新

推荐使用方式一来读取需要热更新的配置属性

首先定义一个配置类,来表示需要热更新的配置
prefix中表示的是ymal中的前缀

然后使用:


nacos中注册配置:bootstrap中spring.name

注意这里的名称必须是

这样配置后,无需重启服务,只需要将nacos中配置文件的值修改后就可生效

③动态路由

如果路由更改,重启网关会将所有服务失败

在Gateway模块添加一个类去监听路由

nacos添加路由信息:

  • 17
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值