当前位置: 首页 > article >正文

Spring Cloud生态

参考视频尚硅谷2025最新SpringCloud教程,springcloud从入门到大牛_哔哩哔哩_bilibili

Nacos

服务注册与发现

服务列表

节点

配置中心

使用nacos管理配置

热刷新

方法1

在controller层标注@RefreshScope

在入口标注@EnableDiscoveryClient

方法2@ConfigurationProperties
把属性抽取到一个类里面


@Component
@ConfigurationProperties(prefix = "rocketmq")
@Data
public class Pro {
    String nameServer;
}

监听

配置变化后在控制台打印出来

@Bean
    ApplicationRunner applicationRunner(NacosConfigManager nacosConfigManager) {
        return args -> {
            ConfigService configService =nacosConfigManager.getConfigService();
            configService.addListener("second.yml", "DEFAULT_GROUP", new Listener() {
                @Override
                public Executor getExecutor() {
                    return Executors.newFixedThreadPool(4);
                }

                @Override
                public void receiveConfigInfo(String s) {
                    System.out.println(s);
                }
            });
        };

负载均衡

基于注解

@LoadBalanced

OpenFeign

简单使用

启动类加注解

@EnableFeignClients

@FeignClient(name = "first")
public interface tmpFeignClient {
    @GetMapping("/first/tmp")
    public String tmp();
}

发送请求/first/tmp

返回数据类型String

超时,重试,拦截

超时报错

可自定义超时时间

//自定义日志
    @Bean
    public Logger.Level logLevel(){
        return Logger.Level.BASIC;
    }
//自定义重试
    @Bean
    Retryer retryer(){
        return new Retryer.Default(100,1000,5);
    }

效果

自定义拦截器,可用于放唯一ID

@Component
public class DefaultInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        System.out.println("自定义拦截器");
    }
}

兜底返回

@FeignClient(value = "userservice",fallback = Fallback.class)  // 注解这是一个Feign客户端,"userservice"是请求服务名
public interface UserClient {

    @GetMapping("/user/{id}")  // 定义HTTP请求是一个GET请求,请求的路径是"/user/{id}"
    User findById(@PathVariable("id") Long id);
}
@Component
public class Fallback implements UserClient {
    @Override
    public User findById(Long id) {
        return new User();
    }
}

Sentinel

默认启动8080,但是经常端口被占用,用8086端口启动

java -Dserver.port=8086 -Dcsp.sentinel.dashboard.server=localhost:8086 -jar sentinel-dashboard-1.8.8.jar

配置

sentinel:
  transport:
    dashboard: 127.0.0.1:8086
    port: 8719
  # 这样一启动能够立马被发现,不用请求一次后才被监控
  eager: true
  # 链路相关的配置
  # 默认是true,开启上下文整合,所有链路在根节点下,链路监控就是将请求分开统计
  web-context-unify: false

这里的spring.cloud.nacos.discovery.server-addr是链接到nacos的路径
下面的spring.cloud.sentinel.transport.dashboard是链接的sentinel的路径,

port是在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互。比如 Sentinel 控制台添加了1个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

标注

@SentinelResource("getOrder")

异常处理

对异常不做处理会抛到最顶层

自定义兜底处理函数

15-2、Sentinel 自定义兜底逻辑_兜底逻辑怎么配置-CSDN博客

流控

熔断

热点

Gateway

路由

路由规则

gateway:
  routes:
    - id: user-service # 路由标示,必须唯一
      uri: lb://userservice # 路由的目标地址
      predicates: # 路由断言,判断请求是否符合规则
        - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
    - id: order-service
      uri: lb://orderservice
      predicates:
        - Path=/order/**
  default-filters:
    - AddRequestHeader=Truth,Itcast is freaking awesome!

这段YAML配置定义了一个网关路由规则,包含两个服务路由和一个默认过滤器。具体功能如下:
配置了两个路由:user-service 和 order-service,分别指向 userservice 和 orderservice,路径匹配 /user/** 和 /order/**。
设置了一个默认过滤器,为所有请求添加请求头 Truth: Itcast is freaking awesome!。

断言

满足规则把请求转下去

12.gateway中的断言(predicate)的使用:内置断言介绍、自定义断言_gateway自定义断言-CSDN博客

过滤器

可用来路径重写

Spring Cloud : Gateway 网关过滤器 GatewayFilter(四)_spring.cloud.gateway.route.filter-CSDN博客

Seata

二阶段提交

分布式事务

用户模块调用订单模块,订单模块调用商品模块,用户模块回滚会影响商品模块

@GlobalTransactional

在方法前面加上全局事务注解


http://www.kler.cn/a/571430.html

相关文章:

  • 高频 SQL 50 题(基础版)_1341. 电影评分
  • 八、Redis 过期策略与淘汰机制:深入解析与优化实践
  • flutter-制作淡入淡出的Banner切换Fade效果
  • windows环境执行composer install出错
  • 轮播图案例
  • C++20中的std::bind_front使用及原理分析
  • 小米 SU7 Ultra:科技与性能的极致融合,FPC 隐匿的关键力量【新立电子】
  • Windows逆向工程入门之MASM STRUCT
  • Visual Studio Code 如何编写运行 C、C++ 程序
  • 多线程与异步任务处理(二):Kotlin协程
  • 【Linux篇】第一个系统程序 - 进度条
  • 【Laplacian边缘检测详解】
  • Compose Multiplatform开发记录之文件选择器封装
  • 三方库总结
  • 【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(成功版)
  • 鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
  • 【leetcode hot 100 189】轮转数组
  • 从零开始学习Slam--数学概念
  • 《Operating System Concepts》阅读笔记:p180-p187
  • 蓝桥杯 2020 国赛 阶乘约数