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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学PHP面向对象内容之常用设计模式(享元)

二、结构型设计模式 7、享元模式(Flyweight Pattern) 这里是引用享元模式(Flyweight Pattern) 是一种结构型设计模式,旨在通过共享对象来减少内存使用,尤其适用于大量相似对象的场景。通过共享和重用对象的…

AI开发 - GPT之魂 用Python 演示chatGPT的自注意力机制 - 机器学习

自注意力机制(Self-Attention)就是让模型在处理每个词时,学会“关注重点”,而不是平均地对每个词一视同仁。这种机制让 GPT 能更聪明地理解句子的上下文和语义之间的关系。 自注意力机制是 GPT 的核心,它帮助模型在理解…

循环神经网络(RNN)简述

RNN及其变体 1、概述 (一)、概念 RNN(Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出。 RNN的循环机制使模型隐层**上一时间步产生的结果, 能够作为当下时间步…

计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

Next.js-样式处理

#题引:我认为跟着官方文档学习不会走歪路 Next.js 支持多种为应用程序添加样式的方法,包括: CSS Modules:创建局部作用域的 CSS 类,避免命名冲突并提高可维护性。全局 CSS:使用简单,对于有传统…

QT:多ui界面显示

文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…

利用大数据和人工智能彻底改变移动测试

移动应用程序是按需提供的公司品牌。它是了解组织提供的任何服务或产品的窗口。在 Kobiton,他们明白这一点 — 他们的使命是通过测试改进移动应用程序。Kobiton 是一个移动测试平台,允许客户在世界任何地方对真实移动设备执行手动和自动测试。它最初是一…

Ubuntu环境中RocketMQ安装教程

参考教程 https://blog.csdn.net/weixin_56219549/article/details/126143231 1、安装JDK,并配置环境变量(略) 2、下载RocketMQ安装包 RocketMQ下载地址,选择二进制包下载 unzip rocketmq-all-5.0.0-ALPHA-bin-release.zip 使…

基于JAVA的旅游网站系统设计

摘 要 自改革开放以来, 我国国内旅游业发展迅速,覆盖面广,但总的来说仍然处于一种低消费、大众化、低水平、 中近距离旅游的状况。旅游基础设备、服务设施建设发展很快,但仍然不能适应国内旅游发展速度的要求。我国的 旅游业是在…

服务器数据恢复—raid6阵列硬盘被误重组为raid5阵列的数据恢复案例

服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分…

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…

循环神经网络(RNN)详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【微服务】Nacos

一、安装 1、官网地址:https://nacos.io/download/nacos-server/ 2、启动:找到bin目录下的startup.cmd双击启动,或者打开一个命令窗口输入: startup.cmd -m standalone双击启动后如下:可以访问控制台地址 访问后的…

混沌工程/混沌测试/云原生测试/云平台测试

背景 私有云/公有云/混合云等具有复杂,分布式,环境多样性等特点,许多特殊场景引发的线上问题很难被有效发现。所以需要引入混沌工程,建立对系统抵御生产环境中失控条件的能力以及信心,提高系统面对未知风险得能力。 …

DM-VIO(ROS)+t265配置运行记录(ubuntu18.04+ros melodic)

在工作中需要对DM-VIO算法进行测试,于是配置并记录了一下: 首先运行ros接口的dm-vio,一定要先配置源码 https://github.com/lukasvst/dm-vio在这个网址把源码下载下来并解压,并安装一下依赖: sudo apt-get install …

自动化运维(k8s)之微服务信息自动抓取:namespaceName、deploymentName等全解析

前言:公司云原生k8s二开工程师发了一串通用性命令用来查询以下数值,我想着能不能将这命令写成一个自动化脚本。 起初设计的 版本一:开头加一条环境变量,执行脚本后,提示输入:需要查询的命名空间&#xff0c…

【数据分析】布朗运动(维纳过程)

文章目录 一、概述二、数学布朗运动2.1 数学定义2.2 布朗运动的数学模型2.21 标准布朗运动2.22 布朗运动的路径2.23 布朗运动的方程 三、布朗运动在金融学中的应用四、数学构造(以傅里叶级数为例)4.1 傅里叶级数的基本思想4.2 构造布朗运动 一、概述 布…

Mybatis Plus 增删改查方法(一、增)

先定义一个简单的测试表,执行脚本如下: create table user(id bigint primary key auto_increment,name varchar(255) not null,age int not null default 0 check (age > 0) ); 根据Spingbootmybatisplus的结构根据表自行构建结构,大致…

基于Matlab的图像去噪算法仿真(二)

在信息化的社会里,图像在信息传播中所起的作用越来越大。所以,消除在图像采集和传输过程中而产生的噪声,保证图像受污染度最小,成了数字图像处理领域里的重要部分。 本文主要研究分析邻域平均法、中值滤波法、维纳滤波法及模糊小…

鸿蒙Next星河版基础代码

目录: 1、鸿蒙箭头函数的写法2、鸿蒙数据类型的定义3、枚举的定义以及使用4、position绝对定位及层级zIndex5、字符串的拼接转换以及数据的处理(1)字符串转数字(2)数字转字符串(3)布尔值转换情况(4)数组的增删改查 6、三元表达式7、鸿蒙for循环的几种写法7.1、基本用…