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

相关推荐
SPC的存折28 分钟前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧1 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩1 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7772 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
阿里加多2 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
杨艺韬2 小时前
vite内核解析-第2章 架构总览
前端·vite
likerhood2 小时前
java中`==`和`.equals()`区别
java·开发语言·python
小小李程序员3 小时前
Langchain4j工具调用获取不到ThreadLocal
java·后端·ai
我是伪码农3 小时前
外卖餐具智能推荐
linux·服务器·前端
2401_885885043 小时前
营销推广短信接口集成:结合营销策略实现的API接口动态变量填充方案
前端·python