天天看點

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分布式事物

繼續閱讀