微服务---Spring Cloud Alibaba 06(微服务项目---文件上传)

Spring Cloud Alibaba微服务架构实战教程—01实战系列教程开篇 SpringCloud-Alibaba微服务架构实战教程—01开篇SpringCloud-Alibaba微服务架构实战教程—01开篇前言技术栈 SpringCloud-Alibaba微服务架构实战教程—01开篇 此项目源自智慧城市方案中的部分需求,是一个结合SpringCloud,SpringCloudAlibaba、Dubbo等技术栈,进行的微服务实战开发案例,长达3万多字的手把手教程,图文并茂,细节到极点,基本囊括了微服务架构中常用技能点,全面覆盖微服务中各种问题的解决方案,是新手入门、初中级开发提升 阅读详情

一、创建初始工程结构

创建项目

 父工程pom文件添加依赖

  • springboot
  • springcloud
  • springcloudAlibaba
  • lombok
 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
     <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

二、子工程resouce

1.子工程resouce添加pom依赖

<dependencies>
        <!--Spring Boot Web (服务-内置tomcat)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Nacos Discovery (服务注册发现)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--Nacos Config (配置中心)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--Sentinel (流量防卫兵-限流和熔断)-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--Spring Boot 监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--spring boot aop-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!--资源服务器权限控制,不做认证-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>

2.子工程resource配置文件

server:
  port: 8881
spring:
  application:
    name: sca-resource
  servlet:
    multipart:
      max-file-size: 100MB  #控制上传文件的大小
      max-request-size: 110MB  #请求数据的大小
  resources:
    static-locations: file:d:/SpringCloudImages  #静态资源的存储目录,默认是resource-static
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yml
# 自定义 后面会用@value注解读取
jt:
  resource:
    path: d:/SpringCloudImages  #设计上传文件存储的根目录(后续要写到配置文件)
    host: http://localhost:8881/ #定义上传文件对应的访问服务器

3.创建启动类

@SpringBootApplication
public class FileApplication {
    public static void main(String[] args) {
        SpringApplication.run(FileApplication.class, args);
    }
}

4.定义Controlelr类

之前做过,不做解释

@Slf4j
@RestController
@RequestMapping("/resource/")
public class ResourceController {
      //当了类的上面添加了@Slf4J就不用自己创建下面的日志对象了
//    private static final Logger log=
//            LoggerFactory.getLogger(ResourceController.class);

     @Value("${jt.resource.path}")
     private String resourcePath;//="d:/uploads/";
     @Value("${jt.resource.host}")
     private String resourceHost;//="http://localhost:8881/";

     @PostMapping("/upload/")
     public String uploadFile(MultipartFile uploadFile) throws IOException {
         //1.创建文件存储目录(按时间创建-yyyy/MM/dd)
         //1.1获取当前时间的一个目录
         String dateDir = DateTimeFormatter.ofPattern("yyyy/MM/dd")
                 .format(LocalDate.now());
         //1.2构建目录文件对象
         File uploadFileDir=new File(resourcePath,dateDir);
         if(!uploadFileDir.exists())uploadFileDir.mkdirs();
         //2.给文件起个名字(尽量不重复)
         //2.1获取原文件后缀
         String originalFilename=uploadFile.getOriginalFilename();
         String ext = originalFilename.substring(
                 originalFilename.lastIndexOf("."));
         //2.2构建新的文件名
         String newFilePrefix=UUID.randomUUID().toString();
         String newFileName=newFilePrefix+ext;
         //3.开始实现文件上传
         //3.1构建新的文件对象,指向实际上传的文件最终地址
         File file=new File(uploadFileDir,newFileName);
         //3.2上传文件(向指定服务位置写文件数据)
         uploadFile.transferTo(file);
         String fileRealPath=resourceHost+dateDir+"/"+newFileName;
         log.debug("fileRealPath {}",fileRealPath);
         //后续可以将上传的文件信息写入到数据库?
         return fileRealPath;
     }
}

5.进行跨域配置

        原先的跨域使用的是@CrossOrigin注解方式,但是它也有弊端,只在controller层处理跨域,微服务项目会被拦截器拦截,走不到controller,所以这个也就没用了,我们需要创建一个配置类在过滤器层面进行跨域配置

package com.jt.files.config;

/**
 * 跨域配置(基于过滤器方式进行配置,并且将过滤优先级设置高一些)
 */
@Configuration
public class CorsFilterConfig {
    @Bean
    public FilterRegistrationBean<CorsFilter> filterFilterRegistrationBean(){
        //1.对此过滤器进行配置(跨域设置-url,method)
        UrlBasedCorsConfigurationSource configSource=new UrlBasedCorsConfigurationSource();
        CorsConfiguration config=new CorsConfiguration();
         //允许哪种请求头跨域
        config.addAllowedHeader("*");
        //允许哪种方法类型跨域 get post delete put
        config.addAllowedMethod("*");
        // 允许哪些请求源(ip:port)跨域
        config.addAllowedOrigin("*");
        //是否允许携带cookie跨域
        config.setAllowCredentials(true);
        //2.注册过滤器并设置其优先级
        configSource.registerCorsConfiguration("/**", config);
        FilterRegistrationBean<CorsFilter> fBean= new FilterRegistrationBean(new CorsFilter(configSource));
        fBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return fBean;
    }
}

基本是固定写法,用时复制粘贴稍作修改即可

三、子工程resource-ui

1.添加pom依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.创建启动类

@SpringBootApplication
public class ClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ClientApplication .class, args);
    }
}

3.创建静态资源页面

创建static静态资源目录,创建html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上载演示</title>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<form id="fileForm" method="post" enctype="multipart/form-data" onsubmit="return doUpload()">
    <div>
        <label>上传文件
            <input id="uploadFile" type="file" name="uploadFile">
        </label>
    </div>
    <button type="submit">上传文件</button>
</form>
</body>
<script>
    //jquery代码的表单提交事件
    function doUpload(){
        //获得用户选中的所有图片(获得数组)
        let files=document.getElementById("uploadFile").files;
        if(files.length>0){
            //获得用户选中的唯一图片(从数组中取出)
            let file=files[0];
            //开始上传这个图片
            //由于上传代码比较多,不想和这里其它代码干扰,所以定义一个方法调用
            upload(file);
        }
        //阻止表单提交效果
        return false;
    };
    // 将file上传到服务器的方法
    function upload(file){
        //定义一个表单
        let form=new FormData();
        //将文件添加到表单中
        form.append("uploadFile",file);
        //异步提交
        let url="http://localhost:8881/resource/upload/";
        axios.post(url,form)
             .then(function (response){
                 alert("upload ok")
                 console.log(response.data);
             })
             .catch(function (e){//失败时执行catch代码块
                 console.log(e);
         })
    }
</script>
</html>

四、测试

测试成功,但这个不是我们需要的,我们来继续的完善它

五、添加网关

服务调用架构图

 浏览器访问我们的页面资源调用网关再访问我们的资源服务

1.添加网关项目并创建启动类

@SpringBootApplication
public class ResourceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ResourceApplication.class,args);
    }
}

2.添加pom依赖

 <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

3.配置配置文件

server:
  port: 9000
spring:
  application:
    name: sca-resource-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yml
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: router01
          uri: lb://sca-resource
          predicates:
            - Path=/sca/resource/upload/**
          filters:
            - StripPrefix=1

4.跨域配置

        我们之前用java代码写配置类进行跨域,现在我们可以再Gateway的配置类里写跨域配置,并写在nacos中进行动态的跨域配置

 5.测试

 测试成功,接下来我们继续完善功能

六、网关限流

1.在网关pom中添加依赖

  • sentinel
  • sentinel-gateway
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

2.配置sentinel

    sentinel:
      transport:
        dashboard: localhost:8180 #Sentinel 控制台地址
        port: 8719 #客户端监控API的端口  端口被占用会递增
      eager: true  #取消Sentinel控制台懒加载,即项目启动即连接

3.配置jvm参数并启动

-Dcsp.sentinel.app.type=1

4.增加流控规则

 5.定义限流后页面返回值

 function upload(file){
        //定义一个表单(axios中提供的表单对象)
        let form=new FormData();
        //将文件添加到表单中
        form.append("uploadFile",file);
        //异步提交(现在是提交到网关)
        //let url="http://localhost:8881/resource/upload/"
        let url="http://localhost:9000/sca/resource/upload/";
        axios.post(url,form)
            .then(function (response){
                alert("upload ok")
                console.log(response.data);
            })
            .catch(function (e){//失败时执行catch代码块
                //被限流后服务端返回的状态码为429
                if(e.response.status==429){
                    alert("上传太频繁了");
                }
                console.log("error",e);
            })
    }

6.测试限流效果

测试成功,接下来我们继续来完善功能

七、AOP面向切面操作日志

1.在resource里添加AOP的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2.创建切入点注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*通过此注解描述需要执行扩展业务逻辑的方法*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredLog {
    String value() default "";
}

有此注解的类方法表示要进行AOP

3.定义日志操作切面

/*Aop 设置中的切面对象*/
/*切点(执行拓展业务逻辑的入口 :@Pointcut
   通知(封装拓展业务逻辑))  :@Around*/
@Aspect
@Component
@Slf4j
public class LogAspect {
    /*定义切入点表达式,在那些地方定义切入点*/
    //注解方式
    @Pointcut("@annotation(com.jt.annotation.RequiredLog)")
    public void doLog(){
    }
    /*在指定的切入点方法上执行@Around注解描述的方法*/
    @Around("doLog()")
    public Object doAround(ProceedingJoinPoint jp) throws Throwable {
        log.info("Around.Before {}", System.currentTimeMillis());
        Object result = jp.proceed(); //执行目标执行连(包含切面,目标方法)
        log.info("Around.After {}",System.currentTimeMillis());
        /*日志存到数据库*/
        return result;
    }
}

@Around定义了环绕通知,我们也可以定义其他的,根据业务不同所用的注解也不同 

4.在需要AOP的方法上添加注解

    @RequiredLog("文件上传")//此注解描述的为切入点方法
    @PostMapping("upload")
    public String uploadFile(MultipartFile uploadFile) throws IOException {

AOP 方式日志记录原理分析

 明:当我们在项目中定义了AOP切面以后,系统启动时,会对有@Aspect注解描述的类进行加载分析,基于切入点的描述为目标类型对象,创建代理对象,并在代理对象内部创建一个执行链,这个执行链中包含拦截器(封装了切入点信息),通知(Around,…),目标对象等,我们请求目标对象资源时,会直接按执行链的顺序对资源进行调用。

明天继续完善功能,进行单点登录实现

Spring Cloud Alibaba微服务架构实战教程—06让你躺平的敏捷开发 一、前言 在高速发展的今天,微服务通常是把一个大项目根据业务或其他方面划分为了诸多小项目,也就意味着这其中,会产生大量的重复操作,比如上文,建立子模块的步骤就来回进行了7-8次。 假设有几十甚至上百个微服务,岂不是新建文件夹都非常的累人?在工作中需要新增大量对象时,岂不是会发生太多重复劳动?这是无法容忍的。 所以,MyBatis官方开发了一款工具叫 MyBatis Generator 。它只需要少量简单的配置,就可以完成大量的表与Java对象的生成工作,拥有零出错和速度快的优点,让开发人员从重复劳动中解 阅读详情

相关推荐

PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享

最近,我突发奇想去翻阅了一些我本科期间所做的一些小项目,发现都挺有意思的!希望通过我的讲解文章可以帮助你们少走一些弯路!今天,我要分享的是一个PID温控实验平台的搭建,这是一个系列文章,手把手地教你学习和认识PID算法,了解这种算法在温度控制中的应用。由于我知识有限,如果出现一些错误,希望大家可以帮助我指出来,我们一起学习进步!!!

qq_35953617的博客 8049

文件存储

SpringCloud Alibaba-OSS 对象存存储服务(Object Storage Service,Oss)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优hua存储成本。 ...

sinat_31089473的博客 513

网络安全学习路线是怎样的?

为什么要学习安全? 近几年网络安全事件层出不穷,相信大家哪怕没遇到过,但也听过不少了吧。如服务器遭受入侵被黑,用户帐号被盗;被钓鱼、勒索病毒等,这些一旦发生,对企业而言都是不小的打击。因此,网络安全不容忽视,同时随着时代的不断发展,公司对于运维及网络工程师要求也越来越严格。未来越来越吃香的一定是技能方向广的复合型人才。网络安全可以说是一条非常好的发展道路。 今年两会期间,全国政协委员,360集团创始人、董事长周鸿祎提交了关于网络安全行业特殊人才的提案,为广大白帽子人员争取更好...

网安技术分享 8700

微服务文件上传实战

项目简介 业务描述 基于Spring Cloud Alibaba解决方案实现文件上传,例如 初始架构设计 本次项目实践,整体上基于前后端分离架构,服务设计上基于spring cloud alibaba解决方案进行实现,例如: 说明,为了降低学习难度,这里只做了初始架构设计,后续会逐步基于这个架构进行演进,例如我们会加上网关工程,认证工程等. 工程创建及初始化 工程结构 参考如下工程结构,进行项目创建,例如: 创建父工程 创建项目父工程用来管理项目依赖. 创建文件服务工程 创建用于处理文件上传业务的

望山。 1358

PHP 对接建行生活订单推送接口

php对接建行订单推送

qq_43647026的博客 562

大模型-CLIP 详细介绍

最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。

晓的博客 9722

构建SpringCloud 项目—文件上传

基于Spring Cloud Alibaba 解决方案实现文件上传 一、业务描述 基于Spring Cloud Alibaba解决方案实现文件上传,例如: 二、工程创建及初始化 1、工程结构 参考如下工程结构,进行项目创建,例如: 2、创建父工程:02-sca-files 创建项目父工程用来管理项目依赖 3、父工程初始化 打开父工程的pom.xml文件,添加如下依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt

AimerDaniel的博客 826

Sentaurus TCAD建模:宽温区n型FinFET模型校准与低温仿真分析

本文基于Sentaurus TCAD平台,建立了n型FinFET的宽温区(233K-393K)仿真模型,解决了低温(73K-193K)仿真失效问题。研究对比了Sprocess工艺仿真与SDE几何建模两种方法,分析了载流子冻析效应、不完全电离和迁移率退化等低温物理机制。通过优化模型参数,实现了在233K、313K和393K条件下仿真误差小于10%,并建立了符合物理趋势的低温外推模型。研究提供了完整的Sentaurus TCAD代码实现,包括器件结构定义、物理模型配置和温度相关参数校准,为宽温区FinFET仿真

huanghm88的专栏 265

SpringCloud:文件上传,服务端签名直传关键步骤。(阿里云)

8.进入文档中心-->实践教程-->网站与移动应用-->客户端只穿-->web端直传实践-->服务端签名直传并设置上传回调概述-->Java。10.重启项目,实现向浏览器发送签名,后续处理好前端逻辑即可。

qq_50975017的博客 732

〔重庆理工大学〕计算机网络实验指导书【实验九 直连路由,静态路由,默认路由配置】

本实验指导书介绍了直连路由、静态路由和默认路由的配置方法。主要内容包括:1)路由器基础知识,包括直连路由、静态路由和动态路由三种路由生成方式;2)路由度量值与匹配顺序,解释了不同路由类型的优先级;3)实验任务分为三个部分:直连路由的查看分析、静态路由的配置以及默认路由的配置,详细说明了配置步骤和命令。实验要求通过模拟器搭建网络环境,完成路由配置使PC间能够互通。实验旨在帮助学生掌握不同路由类型的工作原理和配置方法,适用于简单的网络环境。

Pretty Boy Fox的博客 1058

产品缺陷检测:表面缺陷检测_(1).产品缺陷检测基础理论

确定像素之间的相似性准则,如灰度值的差异。

zhubeibei168的博客 834

Spring Cloud上传图片到项目根路径文件夹下(完美解决,有问题捶我)

前言 来看看离过年还有一个月,已经想着放假的这位。 还有已经放假在家放飞自我,又会赚钱的另一位。 人与人的悲欢并不相通,我只是觉得他们吵闹。 正文 Spring Boot上传图片到项目根路径文件夹下 之前都是借助DFS分布式文件系统。 那现在为啥不用了呢?我就上传几张图片,再搭个DFS文件系统,这不高射炮打蚊子嘛,人间不值得。 文件写到本项目的跟路径下。 if (file.isEmpty()) { return Result.fail("文件不能为空"); }

失忆老幺 1579

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java实战篇06-外卖配送系统(Spring Cloud Alibaba)

本文基于Spring Cloud Alibaba技术栈,详细介绍了如何构建一个功能完整的外卖配送系统。文章首先分析了外卖系统的核心业务流程和角色,然后设计了微服务架构方案,重点讲解了Nacos服务注册、Sentinel流量控制、Seata分布式事务等关键组件。通过环境准备、项目结构搭建和代码示例,展示了从零开始实现系统的完整过程。文章适合具备Spring Boot基础的开发者,通过典型的电商场景实践,帮助掌握分布式系统开发的核心技术。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

科普文:微服务之技术选型 Spring Cloud Alibaba

由于篇幅限制,在这里我们将详细讲解。互联网时代,面对复杂业务,讲究 分而治之。将一个大的单体系统拆分为若干个微服务,保证每个系统的职责单一,可以垂直深度扩展。但是一个个独立的微服务像一座座孤岛,如何将他们串联起来,才能发挥最大价值。“话说天下大势,分久必合、合久必分”这时,我们就要提微服务的生态圈。那么微服务生态圈都有哪些模块?他们的作用分别是什么?。生产者启动时,会将自己的信息注册上报,这样调用方只需连接注册中心,根据一定的负载算法,就可以与服务提供方建立连接,从而实现应用间的解耦。。

为无为,事无事,味无味。 1597

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Cloud & Alibaba 基础知识

如果默认的。

菜可夫斯基的博客 2138

科普文:微服务之微服务框架Spring Cloud Alibaba组件简介

第二代Spring Cloud Alibaba主流时代 spring cloud 现在已经是一种标准了,各公司可以基于它的编程模型编写自己的组件 ,比如Netflix、阿里巴巴都有自己的一套通过spring cloud 编程模型开发的分布式服务组件 。Spring Cloud Alibaba 主要包含 Sentinel、Nacos、RocketMQ、Dubbo、Seata 等组件。 Spring Cloud 二代组件 第二代实现: Spring Cloud Alibaba. Spring Cloud Al

为无为,事无事,味无味。 1946

整合Spring Cloud Alibaba 组件

Spring Cloud Alibaba 是基于 Spring Cloud 生态系统的一套解决方案,它为开发者提供了一系列用于构建微服务的组件。其核心目标是简化微服务的开发和运维,提升服务的可用性和可靠性。Nacos(动态服务发现、配置和服务管理平台)是 Spring Cloud Alibaba 的核心组件之一。它提供了服务注册与发现、动态配置管理和服务管理功能。Sentinel 是一款轻量级的流量控制与熔断降级组件,它为微服务提供了高可用保障。

weixin_44692308的博客 1136

Spring Cloud Alibaba 快速学习之 Sentinel

在微服务系统中,一个对外的业务功能可能会涉及很长的服务调用链路。当其中某个服务出现异常,如果没有服务调用保护机制可能会造成该服务调用链路上大量相关服务直接或间接调用的服务器仍然持续不断发起请求,最终导致相关的所有服务资源耗尽产生异常发生雪崩效应。限流和降级分别作为在流量控制和服务保护方面的两个重要手段,可以有效地应对此类问题。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本章将快速讲解Sentinel的简单应用,阅读前需要先了解前置章节。

D_J_Dragon的博客 1802

spring-cloud-alibaba学习项目

spring-cloud-alibaba项目练习,实现nacos注册配置中心、openFeign服务调用、sentinel降级、gateway网关、log4j2日志记录

810cheng 2135

Spring Cloud Alibaba 笔记

1、前置过滤@Component@Override// 从配置对象中获取配置//如果你想构建一个“预”过滤器,你需要操作请求之前调用chain.filter//使用生成器操作请求//将过滤器的配置属性放在这里2、后置过滤@Component@Override// 从配置对象中获取配置//以某种方式操纵反应}));

szchen2的博客 1667

【从入门到精通Spring Cloud】初识微服务

随着这个饭店的⽣意越来越好,这个厨师忙不过来了,饭店⼜请了⼀个厨师,新厨师和⽼厨师做⼀样的事情,也是洗菜,切菜,炒菜。简单来说,微服务就是很⼩的服务,⼩到⼀个服务只对应⼀个单⼀的功能,只做⼀件事,这个服务可以单独部署运⾏,微服务之间可以采⽤REST和RPC协议进⾏通信。以⼤家都很熟悉的电商系统为例,电商系统包括 : ⽤⼾管理,商品管理,订单管理,⽀付管理,库存管理,物流管理等等,项⽬早期我们会把这些模块都写在⼀个web项⽬中,然后统⼀部署到⼀个Web服务器中。Location:辽宁。

双吉堡工程专业的一名27届Javaer。 1113

Spring Cloud Alibaba微服务组件学习笔记

本文简要介绍了微服务架构中的关键组件。Nacos是服务发现与配置管理平台,支持服务注册、发现和集中式配置管理。结合Ribbon,实现客户端负载均衡,并可通过自定义策略调整负载均衡行为。Feign简化了HTTP客户端开发,并支持日志、超时配置和认证逻辑的定制。Nacos配置中心允许动态更新配置信息。Sentinel提供流量控制和熔断降级功能,确保系统稳定。Seata解决了微服务场景下的分布式事务一致性问题。这些组件共同构建了一个强大、灵活的微服务生态系统。

执笔写JAVA 973

Spring Cloud Alibaba 2022集成Nacos

本文介绍了SpringBoot项目集成Nacos的步骤。首先在pom.xml中添加Nacos注册中心和配置中心的依赖;然后在Nacos中创建dev命名空间;接着配置bootstrap.yml和application.yml文件,前者用于连接Nacos获取配置,后者用于应用配置;在启动类添加@EnableDiscoveryClient注解;最后验证Nacos动态配置功能,通过@RefreshScope注解实现配置热更新。整个流程实现了服务注册到Nacos,并能动态获取和更新配置参数。

DayDayUp的博客 244

Spring Cloud Alibaba 微服务架构深度解析

Service// 定义资源并进行保护// 业务逻辑// 被限流或熔断时的降级逻辑return new Product(-1L, "默认商品", 0.0);场景推荐方案理由国内项目,需中文支持社区活跃度高,文档完善高性能RPC需求Dubbo在长连接、序列化上性能更优金融级分布式事务支持多种事务模式,简化开发已深度集成Spring Cloud原生组件避免架构颠覆性调整。

weixin_40850995的博客 250

Spring Cloud Alibaba Sentinel

上述配置表示,在1秒钟内最少请求2次,当异常数大于3时,会触发熔断操作断路器开启(保险丝跳闸),微服务不可用了,熔断的时长为5秒,不再报错error而是服务降级了出提示Blocked by Sentinel (flow limiting)参数例外项,当p1为某个特殊值时,该热点规则失效,但是热点规则对其他普通值依旧保留此规则,下图即当参数p1为 a 时,单机阈值增加到200,而不是1。(如果做了异常拦截需要关闭其拦截服务)4.慢调用比例:在所以调用中,慢调用占有实际的比例=慢调用次数 / 总调用次数。

pigbd的博客 1042
上一篇: 微服务---Spring Cloud Alibaba 05(网关)
下一篇: 微服务---Spring Cloud Alibaba 07(微服务项目---单点登录)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值