天天看点

spring cloud alibaba之nacos、feign、sentinel服务注册整合示例1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖2、部署Sentinel-Dashboad3、配置sentinel等相关信息4、提供服务并设置限流5、添加具体限流配置6、消费端定义feign接口7、限流测试调用 

继spring cloud alibaba之nacos、feign服务注册整合示例中我们再整合sentinel:因为hystrix不再更新且sentinel限流方式多样可靠!

1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖

<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <!-- sentinel持久化 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
           

其中我们需要将限流类配置持久化,否则sentinel-dashboad重启后配置就会丢失!

2、部署Sentinel-Dashboad

部署略!

下图是限流信息,注意不要在Sentinel-DashBoad端调整配置,虽然能生效,但重启后又会回到默认值,所以修改配置请在Nacos界面修改,这不得不吐糟下没有做到双向配置同步!

spring cloud alibaba之nacos、feign、sentinel服务注册整合示例1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖2、部署Sentinel-Dashboad3、配置sentinel等相关信息4、提供服务并设置限流5、添加具体限流配置6、消费端定义feign接口7、限流测试调用 

3、配置sentinel等相关信息

spring cloud alibaba之nacos、feign、sentinel服务注册整合示例1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖2、部署Sentinel-Dashboad3、配置sentinel等相关信息4、提供服务并设置限流5、添加具体限流配置6、消费端定义feign接口7、限流测试调用 

上图红框是手动添加上去的,其余都是使用http://start.aliyun.com自动生成的!

4、提供服务并设置限流

package com.songjy.spring.cloud.alibaba.demo.order.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author songjy
 * @date 2021-03-15
 */
@RestController
public class OrderController {

    @GetMapping(value = {"/order/{id}"})
    @SentinelResource(value = "getOrderId", fallback = "getOrderIdFallback")
    public String getOrderId(@PathVariable("id") String id) {
        return System.currentTimeMillis() + id;
    }

    public String getOrderIdFallback(String id) {
        return "限流ERROR:" + id;
    }

}
           

上述注解@SentinelResource就是限流配置,其中fallback就是限流后默认返回值!

5、添加具体限流配置

spring cloud alibaba之nacos、feign、sentinel服务注册整合示例1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖2、部署Sentinel-Dashboad3、配置sentinel等相关信息4、提供服务并设置限流5、添加具体限流配置6、消费端定义feign接口7、限流测试调用 

每秒只能同时允许95个请求! 

6、消费端定义feign接口

package com.songjy.spring.cloud.alibaba.demo.user.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "spring-cloud-alibaba-demo-order")
public interface IOrderService {

    @GetMapping(value = {"/order/{id}"})
    String getOrderId(@PathVariable("id") String id);

}
           

另外,若果你不希望服务提供方提供fallback,你希望在服务消费方处理fallback,你可以实现该接口并指定fallback属性,如下:

package com.songjy.spring.cloud.alibaba.demo.user.feign;

import org.springframework.stereotype.Component;

/**
 * @author songjy
 * @date 2021-03-15
 */
@Component
public class OrderServiceFallbackImpl implements IOrderService {
    @Override
    public String getOrderId(String id) {
        return "异常:" + id;
    }
}
           

消费方指定fallback,如下:

spring cloud alibaba之nacos、feign、sentinel服务注册整合示例1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖2、部署Sentinel-Dashboad3、配置sentinel等相关信息4、提供服务并设置限流5、添加具体限流配置6、消费端定义feign接口7、限流测试调用 

 该方式只要服务提供出现任何异常都可以降级处理!建议可以同时存在,双管齐下,以防服务提供方全部宕机!

7、限流测试调用 

package com.songjy.spring.cloud.alibaba.demo.user;

import com.songjy.spring.cloud.alibaba.demo.user.feign.IOrderService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


@SpringBootTest
class SpringCloudAlibabaDemoUserApplicationTests {

    @Autowired
    private IOrderService orderService;

    @Test
    void getOrderIdTest(){
        for (int i = 0; i < 100; i++) {
            String orderId = orderService.getOrderId("第" + (i + 1) + "次");
            System.out.println(orderId);
        }
    }

}
           

执行结果:

spring cloud alibaba之nacos、feign、sentinel服务注册整合示例1、在spring cloud alibaba之nacos、feign服务注册整合示例基础上加入如下依赖2、部署Sentinel-Dashboad3、配置sentinel等相关信息4、提供服务并设置限流5、添加具体限流配置6、消费端定义feign接口7、限流测试调用 

可以看到,接口调用100次,最后5次被限流了,因为每秒只允许95次! 那服务(spring-cloud-alibaba-demo-order)提供方启动2个节点呢,会限流吗?

srping-cloud-alibaba-nacos-feign-sentinel.zip

Sprinig Cloud Alibaba Seata分布式事物

继续阅读