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

news2024/9/22 0:54:37

一、认识微服务

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添加路由信息:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS+JS 扩散登录表单动画

效果演示 Code <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,us…

Grafana HTML Panel展示post获取后数据

<!DOCTYPE html> <html> <head><title>API 数据表格展示</title><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body><table id"data-table" border"1&qu…

每日一题《leetcode--143.重排链表》

https://leetcode.cn/problems/reorder-list/ 这道题我们可以用两种方法 第一种&#xff1a;用数组存储该链表&#xff0c;然后通过访问数组下标的方式来改变该链表的排列方式。 void reorderList(struct ListNode* head) {第一种方法&#xff1a;用线性表存储该链表if(head …

【ARMv8/v9 异常模型入门及渐进 10 -- WFI 与 WFE 使用详细介绍 1】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 WFI 与 WFE等待事件&#xff08;WFE&#xff09;发送事件&#xff08;SEV&#xff09;本地发送事件&#xff08;SEVL&#xff09;WFE 唤醒事件 WFE 使用场景举例与代码实现wfe睡眠函数sev 事件唤醒函数全局监视器和自旋锁 …

项目从 Mysql切换 PostgreSQL 改造及踩坑记录

项目从 Mysql切换 PostgreSQL 改造及踩坑记录 切换流程 项目引入postgresql驱动包 由于我们要连接新的数据库&#xff0c;理所当然的要引入该数据库的驱动包&#xff0c;这与mysql驱动包类似 <dependency><groupId>org.postgresql</groupId><artifactI…

美容美发行业收银系统源码、美业SaaS系统源码

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序

leetcode-设计LRU缓存结构-112

题目要求 思路 双链表哈希表 代码实现 struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){} };class Solution { public: unordered_map<int, Node*> hash; Node* head; Node* tail; int …

【520】《架构演进之路》选题通过

选题通过 碰巧是520这一天&#xff0c;清华社编辑今天下午回复书籍&#xff08;架构演进之路&#xff09;选题通过&#xff0c;一个有纪念意义的日子。 架演共创者联盟成立 目前参与者有8位成员&#xff0c;涉及前后端、大数据、app、数字孪生&#xff0c;可比一个真实项目团队…

k8s笔记 | Prometheus安装

kube-prometheus 基于github安装 选择对应的版本 这里选择 https://github.com/prometheus-operator/kube-prometheus/tree/release-0.11 下载修改为国内镜像源 image: quay.io 改为 quay.mirrors.ustc.edu.cn image: k8s.gcr.io 改为 lank8s.cn 创建 prometheus-ingres…

C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间

glog下载和编译 glog开源地址 https://github.com/google/glog glog静态库编译 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文选择的glo…

如何利用Ubuntu服务器运行深度学习项目?

一、整体思路 先配置好服务器端的软件环境&#xff08;工程源码&#xff0c;miniconda&#xff0c;cuda&#xff0c;显卡驱动等&#xff09;&#xff0c;然后用自己电脑的pycharm远程连接服务器运行代码。一句话总结&#xff1a;借用服务器资源运行代码&#xff0c;本地pycharm…

第三节 mybatis-spring-boot-starter 案例分析

tips&#xff1a;可以利用 docker-desktop 快速搭建 MySQL、Redis 等中间件Docker 安装 Redis | 菜鸟教程 上一章&#xff0c;我们完成了一个自定义 Starter &#xff1b; 这一章&#xff0c;我们来看看 Mybatis 是如何使用 Starter&#xff0c;通过学习 mybatis-spring-boot-s…

深度学习模型keras第二十二讲:使用KerasCV进行语义分割

1、语义分割的概念 1.1语义分割的定义 语义分割是一种计算机视觉领域的图像分割技术&#xff0c;其目标是将一张图像中的每个像素分配给预定义的类别。 在图像领域&#xff0c;语义指的是对图像意思的理解。语义分割就是按照“语义”给图像上目标类别中的每一点打上一个标签…

C#屏蔽基类成员

可以用与积累成员名称相同的成员来屏蔽 要让编译器知道你在故意屏蔽继承的成员&#xff0c;可以用new修饰符。否则程序可以成功编译&#xff0c;但是编译器会警告你隐藏了一个继承的成员 using System;class someClass {public string F1 "Someclass F1";public v…

第四节 Starter 加载时机和源码理解

tips&#xff1a;每个 springBoot 的版本不同&#xff0c;代码的实现存会存在不同。 上一章&#xff0c;我们聊到 mybatis-spring-boot-starter&#xff1b; 简单分析了它的结构。 这一章我们将着重分析 Starter 的加载机制&#xff0c;并结合源码进行分析理解。 一、加载实际…

若依解决使用https上传文件返回http路径问题

若依通过HTTPS请求进行文件上传时却返回HTTP的文件链接地址&#xff0c;主要原因是使用了 request.getRequestURL 获取链接地址。 解决办法&#xff1a; 在nginx配置文件location处加上&#xff1a;proxy_set_header X-Forwarded-Scheme $scheme; 然后代码通过request.getHea…

在程序运行中动态改变变量

场景 出于测试目的&#xff0c;需要在程序运行中去改变程序中的参数 思路 动态的去读第三方存储&#xff0c;比如数据库&#xff0c;缓存&#xff0c;甚至是文件 我的实现 这里使用了gflags&#xff0c;通过flaks实现一个api提供flag的修改 Gflags 是 Google 内部使用的命…

人工智能(Educoder)-- 机器学习 -- 神经网络(初级)

第一关 注&#xff1a; 神经网络的起源和应用 起源&#xff1a;神经网络最早由心理学家和神经学家开创&#xff0c;目的是模拟生物神经系统对真实世界物体的交互反应。应用&#xff1a;现代神经网络用于分类&#xff08;如图像识别、文本分类&#xff09;和数值预测&#xff08…

docker启动clickhouse

docker启动clickhouse 创建clickhouse目录拉取镜像启动临时容器, 生成配置文件正式启动 clickhouse越来越流行&#xff0c;本地想安装个测试环境 创建clickhouse目录 后续作为挂载卷使用 mkdir -p /home/gugu/ckdata/data mkdir -p /home/gugu/ckdata/conf mkdir -p /home/gu…

信捷XD系列PLC通讯失败程序无法下载如何设置

如题:最近在使用信捷PLC&#xff0c;有时会出现通讯不上的问题&#xff0c;下面将通讯配置步骤及注意事项分享。 一、确保PLC通电&#xff0c;电脑使用USB通讯线和PLC连接。 二、打开程序&#xff0c;点击串口标识&#xff0c;会弹出通信配置窗口。 三、双击USB通讯这条进行设…