RestTemplate和Sentinel整合

引入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;
    }
}


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了整合Sentinel,你需要按照以下步骤进行操作: 1. 首先,你需要在Spring Boot的配置文件中添加Sentinel的配置信息。在你提供的引用中,可以看到在配置文件中有一部分是关于Sentinel的配置。你需要根据自己的需求,配置Sentinel的transport地址、dashboard地址以及数据源等信息。 2. 接下来,你需要引入Sentinel的相关依赖。根据引用所述,你可以使用Nacos或Zookeeper等配置中心来推送规则,所以你需要引入相应的依赖,并在客户端中注册监听器,以便时刻监听规则的变化。 3. 对于使用OpenFeign进行服务调用的情况,你可以使用Sentinel来进行服务的熔断降级处理,以提高自身的稳定性。根据引用所述,你需要在OpenFeign中配置Sentinel,以便在被调用的服务接口出现异常时进行相应的处理,避免拖垮消费端的服务接口。 综上所述,你可以按照以上步骤进行整合Sentinel,并根据实际需求配置相应的参数和规则。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【springcloud 微服务】Spring Cloud Alibaba整合Sentinel详解](https://blog.csdn.net/congge_study/article/details/129763132)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值