sentinel服务保护

一、整合sentinel

1、下载并启动sentinel

启动命令(默认是8080端口,因此修改端口号为8070)

bash 复制代码
java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar

2、引入依赖

XML 复制代码
<!--整合sentinel-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

3、application.yaml增加sentinel配置

XML 复制代码
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8070

4、重启微服务,并发起一些请求

二、利用sentinel实现请求的限流

2.1、流控

2.1.1、qps和并发线程数的区别

并发线程数:表示web请求进来服务器,tomcat开启几个线程来处理这些web请求。

qps:单位时间内,请求接口次数限制。

2.2、fallback

2.2.1、添加依赖

XML 复制代码
<dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-okhttp</artifactId>
            </dependency>

2.2.2、application.yaml配置

XML 复制代码
feign:
  okhttp:
    enabled: true
  sentinel:
    enabled: true

2.2.3、写FallbackFactory接口的实现类

java 复制代码
package com.niuniu.user.feignclient.fallback;

import com.niuniu.user.feignclient.OrderClient;
import com.niuniu.user.model.Order;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;

import java.util.Collections;
import java.util.List;

@Slf4j
public class OrderClientFallBackFactory implements FallbackFactory<OrderClient> {
    @Override
    public OrderClient create(Throwable throwable) {
        log.error("OrderClient error!", throwable);
        return new OrderClient() {
            @Override
            public List<Order> getOrdersByUserId(Long userId) {
                return Collections.emptyList();
            }
        };
    }
}

2.2.4、生成上一步实现类的对象

java 复制代码
package com.niuniu.user.config;

import com.niuniu.user.feignclient.fallback.OrderClientFallBackFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FallBackConfig {

    @Bean
    public OrderClientFallBackFactory orderClientFallBackFactory() {
        return new OrderClientFallBackFactory();
    }
}

2.2.5、feignclient接口增加fallbackFactory = OrderClientFallBackFactory.class

java 复制代码
package com.niuniu.user.feignclient;

import com.niuniu.common.config.DefaultFeignConfig;
import com.niuniu.user.feignclient.fallback.OrderClientFallBackFactory;
import com.niuniu.user.model.Order;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Component
@FeignClient(value = "order-service", configuration = DefaultFeignConfig.class, fallbackFactory = OrderClientFallBackFactory.class)
public interface OrderClient {
    @GetMapping(value = "/order-service/order/getOrdersByUserId")
    List<Order> getOrdersByUserId(@RequestParam("userId") Long userId);
}

2.2.6、测试

修改变调用微服务的代码

java 复制代码
/**
     * 根据用户查询订单
     * @param userId
     * @return
     */
    @GetMapping("/getOrdersByUserId")
    public List<Order> getOrdersByUserId(@RequestParam(name = "userId") Long userId){
        log.info(UserContext.getUser().toString());
        int i = 1;
        System.out.println(i / 0);
        return orderMapper.getByUserId(userId);
    }

2.3、服务熔断

相关推荐
发现一只大呆瓜2 小时前
深度解密 Rollup 插件开发:核心钩子函数全生命周期图鉴
前端·vite
陳10302 小时前
Linux:进程间切换与调度
linux·运维·服务器
java_nn2 小时前
一文了解前端技术
前端
发现一只大呆瓜2 小时前
深度解析 Rollup 配置与 Vite 生产构建流程
前端·vite
小码哥_常3 小时前
安卓黑科技:让手机成为你的“跌倒保镖”
前端
小李子呢02114 小时前
前端八股Vue---Vue2和Vue3的区别,set up的用法
前端·javascript·vue.js
m0_647057964 小时前
Harness Engineering 实践指南
前端
JJay.4 小时前
Android BLE 稳定连接的关键,不是扫描,而是 GATT 操作队列
android·服务器·前端
一 乐4 小时前
电影院|基于springboot + vue电影院购票管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·电影院购票管理管理系统
星空椰4 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript