SpringCloud2~~~

Nacos

Nacos就是替代 注册中心【Eureka】 和  配置中心【Config】

支持AP和CP,可以切换

了解即可

 下载和运行

下载版本(找自己想要的版本):Tags · alibaba/nacos · GitHub

本地有良好的 Java8 + Maven环境

解压安装包,直接运行bin 目录下的startup.cmd

命令运行成功后直接访问:http://localhost:8848/nacos

默认用户名/密码为nacos

创建服务提供方

新建模块,端口使用10004

父项目引入依赖 

本项目引入依赖,把自己注册到Nacos

application.yml

主启动类

再新建一个模块,端口使用10006,变成集群

创建服务消费方

新建模块,端口使用80

引入依赖,把自己注册到Nacos

yml

配置类

nacos集成了ribbon,支持负载均衡

自己配置负载均衡算法

主启动类

Controller

配置中心实例

每个微服务模块可以拉取配置中心的配置,统一使用、更改

在Nacos Server加入配置

进入Nacos Server,加入配置(文件后缀必须是.yaml

创建Nacos配置客户端模块

新建模块,端口使用50000

引入依赖

springboot中配置文件的加载是存在优先顺序的,bootstrap优先级高于application

application.yml

bootstrap.yml

服务注册中心和配置中心可能不是同一个,目前是本机,所以是相同的地址

  1. nacos 配置客户端/当前的微服务模块, 会根据配置,找到配置中心的数据(配置文件)
  2. config.server-addr: localhost:8848 可以找到配置中心
  3. spring.application.name 对应DataId: e-commerce-nacos-config-client 拼接
  4. 在application.yml: 配置 spring.profiles.active: dev拼接
  5. spring.cloud.nacos.config.file-extension 配置文件的扩展名:yaml拼接
  6. 小结: 根据配置 就是 到 localhost:8848 下的 e-commerce-nacos-config-dev.yaml获取配置信息/数据
  7. 规则就是: ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}来定位配置中心的 Data ID

主启动类

Controller

1. client 会拉取nacos server 的 e-commerce-nacos-config-client-dev.yaml 数据
2. @Value("${config.ip}") 会将 config.ip 赋给  configIp
3. 这里${config.ip} 不能乱写,要有依据,否则项目启动不了

Nacos分类配置(实现配置隔离)

DataID方案

只需要把配置中心模块的application.yml的active修改成test就能读取数据

Group方案

Namespace方案

以开发dev环境为例

先找namespace,再找group,再根据DataID规则进行查找

总结

Sentinel

分布式系统的流量防卫兵,保护你的微服务

Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

绿色方框就是Sentinel可以完成的功能

控制台

下载控制台 jar 包并在本地启动  下载地址:https://github.com/alibaba/Sentinel/releases

以sentinel‐dashboard‐1.8.0.jar为例

#启动控制台命令
java ‐jar sentinel‐dashboard‐1.8.0.jar

访问 http://localhost:8080/#/login,默认用户名密码: sentinel/sentinel

默认端口是8080,可以修改端口

监控微服务

在10004模块引入依赖

修改yml

关于transport.port

1、端口配置会在被监控的微服务对应主机上启动 Http Server
2、该 Http Server 会与 Sentinel 控制台交互
3、比如sentinel控制台添加了一个限流规则,会把规则数据push给这个Http Server接收,Http Server再将这个规则注册到Sentinel中
简单地讲:transport.port指定被监控的微服务应用于sentinel控制台交互的端口

默认端口是8719,如果被占用了,会依次+1扫描,直到找到一个没有被占用的

细节

流量控制

规则

流量控制实例-QPS

在流控规则菜单,可以看到新增的流控规则

注意

返回什么,在sentinel的资源名就会显示什么,执行完clean才会执行controller真正的方法

流量控制实例-线程数

一个请求对应一个线程

请求之后才会有簇点链路

上一个线程比如0.01s完成,所以销毁了,不会出现限流效果

流量控制实例-关联

当关联的资源达到阈值时,限制自己

使用postman进行测试,在/t2没有结束的时候去访问/t1才能看到异常

流量控制实例-Warm up

coldFactor:冷加载因子

为/t2增加规则

流量控制实例-排队

熔断降级

熔断策略

慢调用比例

异常比例

异常数

熔断降级实例-慢调用比例

熔断降级实例-异常比例

postman测试

熔断降级实例-异常数

热点规则

热点参数限流,对接口中的某一个参数限流

1.@SentinelResource : 指定sentinel限流资源
2.value = "news" 表示sentinel限流资源 名称,由程序员指定
3. blockHandler = "newsBlockHandler": 当出现限流时,由newsBlockHandler方法进行处理

独立设置热点 id=10 QPS 阈值 ( 即添加例外 )
在热点参数限流规则,点击编辑
访问localhsot:10004/news?id=100&type=教育,现在就是个例外

注意

系统规则

在系统稳定的前提下,保持系统的吞吐量

入口QPS

簇点链路出现,才能新增系统规则,也就是要先请求资源

@SentinelResource

自定义全局限流处理类

在handler包下创建处理类

Controller层

fallback

三种情况:1、正常访问  2、限流  3、异常,现在把2和3都交给fallback处理

 

也可以再加上限流规则

exceptionsToIgnore

希望某个异常用系统默认的方式执行

接入Sentinel的方式

代码方式

硬编码,侵入性强,不推荐

注解方式

侵入性低,前面用过,推荐

@SentinelResource

注解支持 · alibaba/Sentinel Wiki

注解方式埋点不支持 private 方法。
可以把方法看成一个埋点,如果(Controller层的方法 限流处理类的方法)是private,@SentinelResource就不会起作用

OpenFeign+Sentinel对远程调用熔断降级

当前微服务基础环境

  还没有使用Sentinel

服务消费者整合OpenFeign

引入依赖

Service层接口

1. 远程调用方式是 get
2. 远程调用的url 为 http://member-service-nacos-provider/member/get/{id}
3. member-service-nacos-provider是nacos注册中心服务名
4. openfeign会根据负载均衡算法来决定调用的是 10004/10006,默认是轮询算法
5. openfeign是通过接口方式调用服务

Controller层

主启动类

服务消费者整合Sentinel

引入依赖

yml

对远程调用熔断降级

OpenFeign默认超时时间是1秒,如果10004的对应的API让他休眠2s

出现异常,一定是Service层的接口方法出现问题,需要实现这个接口,并在接口加上fallback

yml

注意

规则持久化

持久化方案

Nacos Server配置中心-规则持久化实例

将规则全都放在Nacos中配置,然后consumer模块获取规则,再push到Sentinel

1、在 Nacos Server 配置中心增加 Sentinel 客户端/微服务模块 的流控规则

2、引入依赖、配置yml,根据dataId,push给Sentinel

注意

演示了流控规则

其他的规则rule-type:degrade,system,param-flow

规则种类-官方文档

Seata

安装和配置

Seata下载

1、修改conf\file.conf文件

2、创建seata数据库

3、创建表,sql脚本在\conf\db_store.sql

4、修改seata的\conf\registry.conf,配置注册中心nacos server

Seata分布式事务-应用实例

创建服务

  • 仓储服务:对给定的商品扣除仓储数量。
  • 订单服务:根据采购需求创建订单。
  • 帐户服务:从用户帐户中扣除余额。

order_micro_service(对应order数据库) 
account_micro_service(对应account数据库)
storage_micro_service(对应storage数据库)

为3个业务数据库创建回滚日志表undo_log

回滚日志表在Seata的conf\db_undo_log.sql

storage-micro-service-10010

参考10004模块

配置文件 

引入依赖

application.yml

datasource指定对应的数据库名

file.cof

从seata的 \conf\file.conf 拷贝进行修改

registry.conf

从seata的 \conf\registry.conf 拷贝进行修改

 

配置类

常规配置 Mybatis 和 dao关联

DataSourceProxy 是引入的 io.seata.rm.datasource

主启动类 

需要取消数据源的自动配置,而是使用seata 代理数据源, DataSourceProxy

account-micro-service-10012

参考10010

配置文件:

        引入依赖,直接拷贝

        application.yml,修改端口号,微服务名,数据库名

        file.conf,registry.conf直接拷贝

配置类: 

        直接拷贝

主启动类

order-micro-service-10008

参考10010

配置文件:

        引入依赖,直接拷贝

        application.yml,修改端口号,微服务名,数据库名

        file.conf,registry.conf直接拷贝

配置类: 

        直接拷贝

 1. 我们的前端如果是以json格式来发送添加信息Order, 那么我们需要使用@RequestBody
才能将数据封装到对应的bean, 同时保证http的请求头的 content-type是对应
2. 如果前端是以表单形式提交了,则不需要使用@RequestBody, 才会进行对象参数封装, 同时保证http的请求头的content-type是对应

主启动类

报错解决

模拟超时异常

控制save方法

1. @GlobalTransactional : 分布式全局事务控制  io.seata.spring.annotation包
2. name = "hspedu-save-order" 名称,程序员自己指定,保证唯一即可
3. rollbackFor = Exception.class 指定发送什么异常就回滚, 这里我们指定的是Exception.class,即只要发生了异常就回滚

Seata工作机制

TM就是事务的发起者(在save方法标注@GlobalTransactional),注册到TC

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue进阶之单组件开发与组件通信

书接上篇,我们了解了如何快速创建一个脚手架,现在我们来学习如何基于vite创建属于自己的脚手架。在创建一个新的组件时,要在新建文件夹中打开终端创建一个基本的脚手架,可在脚手架中原有的文件中修改或在相应路径重新创建&#xf…

VPS默认是通过密钥文件登陆机器,编译~让机器能直接通过root密码登陆。

SSH 登录机器 登陆机器 输入命令切换到root权限并修改密码: sudu su #切换root权限psddwd #修改密码 修改登陆方式 输入命令: vi /root/.ssh/authorized_keys 找到 “ssh-rsa”字样, 按键盘 ” i ” 进入编辑模式&#xf…

map用于leetcode

//第一种map方法 function groupAnagrams(strs) {let map new Map()for (let str of strs) {let key str ? : str.split().sort().join()if (!map.has(key)) {map.set(key, [])}map.get(key).push(str)} //此时map为Map(3) {aet > [ eat, tea, ate ],ant > [ tan,…

文件比较和文件流

文件比较和文件流 一、文本比较工具 diff1.基本用法1.1输出格式 2.常用选项 二、文件流1.文件的打开模式2.文件流的分类ifstreamofstreamfstrem区别 3.文件流的函数1. 构造函数2. is_open 用于判断文件是否打开3. open4. getline5. close6. get()7. read8. write9. put10. gcou…

《如何使用Unity的Avatar人偶以及启动重定向-实现2个或多个人物模型使用同一个动画片段》

8.5 使用Avatar和人物重定向 注意事项: 这个人偶以及重定向技术只能作用于人物模型! 这个人偶以及重定向技术只能作用于人物模型! 这个人偶以及重定向技术只能作用于人物模型! 1. 基本原理 在Unity中,Avatar人偶和…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑: 开发语言 毋庸置疑,在 UI 自动化测试领域&am…

百度 文心一言 vs 阿里 通义千问 哪个好?

背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…

基于协同推荐的黔醉酒业白酒销售系统

文末获取源码和万字论文 摘 要 基于协同推荐的黔醉酒业白酒销售系统主要针对黔醉酒业的具体业务需求所设计,现阶段阶段我国大型企业都会有自己的电商平台以及销售管理系统,其功能对于中小型过于冗长复杂,成本也不是中小型企业能够承受的&…

解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)

报错: [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是: from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…

Kali Linux系统一键汉化中文版及基础使用详细教程

Kali Linux系统一键汉化中文版及基础使用详细教程 引言 Kali Linux是一款基于Debian的Linux发行版,专为渗透测试和网络安全而设计。由于其强大的功能和丰富的工具,Kali Linux在安全领域得到了广泛应用。然而,许多用户在使用Kali Linux时会遇…

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具,支持多种模型和训练方法,包括预训练、监督微调、强化学习等,同时提供量化技术和实验监控,旨在提高训练速度和模型性能。 官方开源地址:https://github.com/hiyouga/L…

使用PyQt5开发一个GUI程序的实例演示

一、安装Python 下载安装到这个目录 G:\Python38-32 安装完成有这些工具,后面备用: G:\Python38-32\Scripts\pyrcc5.exe G:\Python38-32\Scripts\pyuic5.exe 二、PyQt环境配置 pip install PyQt5 pip install pyqt5-tools 建议使用国内源&#xff0c…

【开源免费】基于Vue和SpringBoot的校园资料分享平台(附论文)

博主说明:本文项目编号 T 059 ,文末自助获取源码 \color{red}{T059,文末自助获取源码} T059,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

LocalDateTime序列化(跟redis有关)

使用过 没成功,序列化后是[2024 11 10 17 22 20]差不多是这样, 反序列化后就是: [ 2024 11 10.... ] 可能是我漏了什么 这是序列化后的: 反序列化后: 方法(加序列化和反序列化注解)&…

32 从前序与中序遍历序列构造二叉树

32 从前序与中序遍历序列构造二叉树 32.1 从前序与中序遍历序列构造二叉树解决方案 class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {return buildTreeHelper(preorder, inorder, 0, 0, inorder.size() - 1)…

【韩顺平老师Java反射笔记】

反射 文章目录 基本使用反射机制java程序在计算机有三个阶段反射相关的主要类 反射调用优化Class类的常用方法获取Class对象的6种方式哪些类型有Class对象类加载类加载时机类加载过程图 通过反射获取类的结构信息第一组&#xff1a;java.lang.Class类第二组&#xff1a;java.la…

Python实现2048小游戏

2048是一个单人益智游戏&#xff0c;目标是移动和合并数字&#xff0c;以达到2048。 1. 实现效果 Python实现2048小游戏 2. 游戏规则 简单地理解一下规则 基本规则&#xff1a; 4x4棋盘&#xff0c;每个格可包含一个2的倍数的数字&#xff0c;初始时为空&#xff0c;表示0。…

基于树莓派3B+的简易智能家居小项目(WiringPi库 + C语言开发)

github主页&#xff1a;https://github.com/snqx-lqh 本项目github地址&#xff1a;https://github.com/snqx-lqh/RaspberryPiSmartHome 硬件开源地址&#xff1a;https://oshwhub.com/from_zero/shu-mei-pai-kuo-zhan-ban 欢迎交流 树莓派智能家居项目&#xff0c;学习树莓派的…

MacOS安装MySQL数据库和Java环境以及Navicat

安装MySQL 去官网下载&#xff1a;MySQL 下载好后安装&#xff0c;在设置里往下滑&#xff0c;出现了这样&#xff0c;就代表安装成功了 接下来配置环境&#xff1a; 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格)&#xff0c;输入完成后点击…

【论文笔记】Towards Online Continuous Sign Language Recognition and Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Towards Online Continuou…