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、服务熔断

相关推荐
pianmian13 小时前
类(JavaBean类)和对象
java
我叫小白菜4 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison4 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍5 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122465 小时前
JAVA内存区域划分
java·开发语言·redis
小小小小宇5 小时前
虚拟列表兼容老DOM操作
前端
悦悦子a啊5 小时前
Python之--基本知识
开发语言·前端·python
勤奋的小王同学~5 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇5 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097625 小时前
JavaEE-Linux环境部署
java·linux·java-ee