整合SpringCloudAlibaba----Gateway与Sentinel实现Push模式推送配置

整合三部曲 添加依赖 ,添加配置,添加注解

下载Sentinel

官方地址

java -jar 启动 进入控制台

在这里插入图片描述

添加依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        
        <!--gateway整合sentinel -->
         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
        </dependency>

        <!-- sentinel Push模式依赖 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba.nacos</groupId>
                    <artifactId>nacos-client</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

添加配置

    # 熔断限流
    sentinel:
      transport:
        dashboard: ${wfx.ip}:8080
      #取消控制台懒加载
      eager: true           
      datasource:
      #这里用的是Push模式 把配置推送到nacos上 防止重启之后 限流配置失效
        ds1:                 
          nacos:
            #流控规则
            server-addr: ${wfx.ip}:8848
            data-id: ${spring.application.name}-${spring.profiles.active}-flow
            groupId: ${spring.application.name}-group
            data-type: json
            rule-type: flow

Nacos配置管理添加 gateway-server-dev-flow

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tye8Wh1F-1624860941620)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210628112600775.png)]

[
    {
    #资源名,即限流规则的作用对象
    "resource": "search-server",
    #限流阈值类型,QPS 或线程数,0 代表根据并发数量来限流,1 代表根据 QPS 来进行流量控制
    "grade": 1,
    #限流阈值
    "count": 1,
    #根据调用关系选择策略 0直连 1关联 2链路
    "strategy": 0,
    #流控效果(0直接拒绝 / 1排队等待 / 2慢启动模式),不支持按调用关系限流
    "controlBehavior": 0
    }
]

gateway只做上游服务的流控规则 上游调用下游服务的时候,可以单独在下游服务做流控,降级或者来源访问控制

整合gateway网关sentinel统一返回熔断信息

@Slf4j
@Configuration
@RequiredArgsConstructor
public class MyUrlBlockHandler {
    private final BaseBean baseBean;

    @PostConstruct
    public void init() {
        BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwable t) {
                Route gatewayUrl = exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
                URI uri = gatewayUrl.getUri();
                String authority = uri.getAuthority();
                log.info("系统环境:{},限流=====Ip:{},请求服务名:{},url:{},路径:{}"
                        , baseBean.getEv()
                        , IpUtil.getIp(exchange.getRequest())
                        , authority
                        , exchange.getRequest().getURI()
                        , exchange.getRequest().getPath());
                Map map = new HashMap();
                map.put("code", ErrorEnum.SYSTEM_OFTEN.code());
                map.put("msg", ErrorEnum.SYSTEM_OFTEN.value());
                map.put("data", "");
                return ServerResponse.status(HttpStatus.OK)
                        .contentType(MediaType.APPLICATION_JSON)
                        .body(BodyInserters.fromValue(map));
            }
        };
        GatewayCallbackManager.setBlockHandler(blockRequestHandler);
    }

}

启动gateway

sentinel控制台会出现一下信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qGtiHSXB-1624860941621)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210628140711188.png)]

测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTxDDizk-1624860941624)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210628140949484.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4s5ooN3M-1624860941626)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20210628141055600.png)]
search-server服务下期搭建

下期分享整合SpringCloudAlibaba----OpenFeign与Sentinel

传送门

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值