RestTemplate和Sentinel整合

news2024/12/23 17:33:15

引入restTemplate

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class OrderApplication {

    @Bean
    @LoadBalanced
    //添加注解@SentinelRestTemplate
    @SentinelRestTemplate
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class);
    }
}

控制器,通过RestTemplate 实现http请求

@RestController
public class RestTemplateController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/order/{id}")
    public String getUser(@PathVariable Integer id){
      String result =  restTemplate.getForObject("http://msb-user:10001/user/" + id, String.class);
        return result;
    }
}

服务提供者

@RestController
public class UserController {

    @GetMapping("/user/{userId}")
    public String getUserName(@PathVariable Integer userId){
        return "善缘老师";
    }
}

添加流控

注意选对流控请求
在这里插入图片描述

正常请求
在这里插入图片描述
频繁请求
在这里插入图片描述

统一异常处理

注解添加属性
在这里插入图片描述

   @Bean
    @LoadBalanced
    @SentinelRestTemplate(blockHandler = "handleException",
            blockHandlerClass= GlobalException.class
            ,fallback = "fallback",
            fallbackClass = GlobalException.class)
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class);
    }

异常类注意对象的引用,引用错误则启动报错

import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.msb.order.util.Result;
import org.springframework.http.HttpRequest;

import org.springframework.http.client.ClientHttpRequestExecution;

public class GlobalException {

    public static SentinelClientHttpResponse handleException(HttpRequest request,
                                                             byte[] body, ClientHttpRequestExecution execution, BlockException ex) {
        Result r = Result.error(-1, "===被限流啦===");
        System.out.println("近日来零三零三零是否");
        try {
            return new SentinelClientHttpResponse(new ObjectMapper().writeValueAsString(r));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static SentinelClientHttpResponse fallback(HttpRequest request,
                                                      byte[] body, ClientHttpRequestExecution execution, BlockException ex) {
        Result r = Result.error(-2, "===被异常降级啦===");
        System.out.println("近日来零三零三零是否2");
        try {
            return new SentinelClientHttpResponse(new ObjectMapper().writeValueAsString(r));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return null;
    }
}


异常请求
在这里插入图片描述

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

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

相关文章

【已解决】html元素如何使字体占据相同的元素显得整齐

本博文源于自身的亲身实践,让html的文本元素对齐,如果不让其对齐就会变得很丑陋,如下图,那么如何设置才能让元素占据相同呢? 文章目录 1、问题来源2、问题解决思路3、问题解决方案4、问题完整源码及效果 1、问题来源 …

animation.css无法显示动画效果问题解决

在使用【微信开发者工具】开发微信小程序时发现无法在开发者工具中展示出动画效果来 但是真机调试中可以正常的显示动画效果 【关于微信小程序中如何使用animation.css,参考微信小程序使用animation.css_THE WHY的博客-CSDN博客 】 同时发现在官网上点击各个动画并…

Django_POST请求的CSRF验证

目录 正常验证CSRF form表单 ajax的POST请求 关闭CSRF验证 源码等资料获取方法 django的POST接口发起请求默认清空下需要进行CSRF验证 正常验证CSRF form表单 如果form表单直接在标签之间添加{{ csrf_token }}就可以完成验证 ajax的POST请求 ajax的post需要在请求的he…

【Vue2.0源码学习】模板编译篇-模板解析阶段(整体运行流程)

文章目录 1. 前言2. 什么是模板编译3. 整体渲染流程4. 模板编译内部流程4.1 抽象语法树AST4.2 具体流程 5. 小总结6. 整体流程7. 回到源码8. 总结 1. 前言 在前几篇文章中,我们介绍了Vue中的虚拟DOM以及虚拟DOM的patch(DOM-Diff)过程,而虚拟DOM存在的必…

阿里云AliYun物联网平台使用-设备添加以及模拟设备端上云

一、前言 上一篇文章提到,我们已经申请了免费的阿里云平台,下面需要将我们的设备在阿里云上进行注册和申请,以便于我们的数据上云。 二、步骤 注册产品(设备模型) 在产品页面,点击 "创建产品" 。…

DevExpress WinForms TreeList控件,让业务数据展示更清晰!(一)

DevExpress WinForms的TreeList控件是一个功能齐全、数据感知的TreeView-ListView的混合体,它可以以树形、网格或两者结合的形式显示数据信息。无论是数据绑定模式还是非绑定模式,都具有完整的数据编辑支持。 PS:DevExpress WinForm拥有180组…

【测试开发】Junit 框架

目录 一. 认识 Junit 二. Junit 的常用注解 1. Test 2. Disabled 3. BeforeAll 4. AfterAll 5. BeforeEach 6. AfterEach 7. 执行测试 三. 参数化 1. 引入依赖 2. 单参数 3. 多参数 3.1 通过CSV实现 3.2 通过方法实现 4. 测试用例的执行顺序 四. 断言 五…

设计模式【结构型】-- 装饰者模式

装饰模式(Decorator Pattern) 定义 装饰者模式是一种结构型设计模式,它允许你动态地将新功能添加到对象中,通过将对象放入包含这些功能的特殊包装器对象中。这样一来,你可以在运行时通过组合不同的对象来扩展功能&…

用手机号注册亚马逊买家号需要注意什么问题

亚马逊平台的买家号可以用手机号注册也可以用邮箱进行注册,注册方法都是打开官网后点击注册,根据提示输入账号信息。当使用手机号注册亚马逊买家号时,有一些问题需要注意: 1、确保手机号的准确性:正确的手机号码非常重…

Android 系统的分区介绍

由于Android系统采用Linux架构,所以Android的系统分区可以类比同样采用Linux架构的操作系统(如Windows)。 Android系统分区分类 现在一般常见的Android分区方式共有三种,在不同的Android系统版本上会采用不同的分区方式。 1、传…

CentOS 7.8 Oracle 19C安装部署

CentOS 7.8 Oracle 19C安装部署 一、环境检查1、操作系统检查2、内存检查3、SWAP检查4、共享内存检查5、磁盘空间检查 二、YUM配置及RPM依赖包安装1、YUM源搭建2、 RPM依赖包安装 三、创建组、用户、目录1、创建组、用户2、创建目录 四、系统参数配置1、关闭防火墙2、配置域名解…

跟我一起从零开始学python(七)机器学习

前言 回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,昨天和今天讲到了数据库编程篇MySQL,Redis今天第三篇MongoDB篇,前面没看的也不用往前翻,系列文已经整理好了&a…

【Axure高保真原型】美化滚动条模板

今天和大家分享美化滚动条的原型模板,包括美化动态面板滚动条、页面滚动条、内联框架滚动条,其中内联框架滚动条是通过美化对应调用的页面的滚动条而美化,并不是直接美化内联框架的滚动条。具体效果可以观看下方视频或者打开预览地址体验&…

个人微信开发API,微信机器人。

微信个人号二次开发,基于API开发可以有很多功能模块 各种知名SCRM系统、客服平台都是根据此API二次开发的。 在这里插入图片描述 好友管理: 添加好友、 删除好友、 修改备注、 创建标签、 获取好友列表、 检测僵尸粉 设置个人头像 同意添加好友 获取好…

【面试题38】linux下面chmod和chown使用详解

文章目录 一、前言二、什么是 chmod 命令?2.1 使用方法:2.2 数值表示法:2.3 符号表示法: 三、什么是 chown 命令?3.1 使用方法:3.2 更改所有者和用户组: 四、使用示例4.1 使用 chmod 命令修改权…

想要逼疯项目经理,真的太简单了

早上好,我是老原。 最近有个小友来找我吐槽,说太崩溃了,带个项目太不容易了…… 此情此景,我已经脑补了各种抱头痛哭流涕的画面,油然升起一股同情。 其实,项目经理,听起来是个经理&#xff0…

echarts条形图动态显示2

1、实现效果,条形图自动滚动,鼠标移入停止滚动,移出继续滚动 2、代码 声明的变量:图表,图表数据与定时器 myChartArea: , dataArea: {categoryData: [],valueData: [],fullData: [], }, timeOut: null,设…

【无公网IP端口映射】远程访问本地jupyter notebook服务

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…

Devchat让代码爽飞

Devchat让代码爽飞 安装python3安装vscode中安装devchat插件使用参考资料 devchat是一个免费的vscode插件,可以在vsocde中提示代码。 安装 devcha依赖于python3,首先需要再电脑中安装python3.然后在vscode中安装插件,然后利用python安装dev…

canal探索及应用

认识canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年…