栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

nacos+sentinel+openfeign实现流控Demo

nacos+sentinel+openfeign实现流控Demo

nacos+sentinel+openfeign实现流控Demo

需求项目结构图Sentinel控制台准备nacos准备根模块内容

pom.xml consumer

pom.xmlbootstrap.ymlRemoteServiceRemoteServiceFallbackConsumerController启动程序 Provider

pom.xmlbootstrap.ymlProviderController启动程序 测试

需求

使用nacos进行服务的注册与发现
使用openfeign进行服务间的调用
使用sentinel进行消费者服务的流量控制
大体逻辑:

两个服务,一个comsumer,一个provider,浏览器访问consumer的/echo地址,consumer内部通过feign访问provider的/echo拿到处理结果,返回给浏览器同时定义一个流量超过限制的/echo 项目结构图

Sentinel控制台准备

到github release下载sentinel dashboard 的jar包,在自己电脑cmd启动起来然后最小化即可

java -Dserver.port=8718 -jar sentinel-dashboard-1.8.0.jar
nacos准备

网上搜一下吧,云服务器记得开8848,9848,9849端口

根模块内容 pom.xml
spring boot 2.3.3.RELEASE
spring-cloud-dependencies Hoxton.SR9
spring-cloud-alibaba-dependencies 2.2.6.RELEASE

注意boot于cloud的版本兼容问题,不然会报错Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resourcedependencies是要写在dependencyManagement里的,而不是dependencies里,dependencyManagement的作用是版本管理,它下面的不会被maven自动导入,在根模块添加了这个dependencyManagement,子模块里使用它下面的包时,就不用管它的版本了,可以观察consumer和provider的pom文件 consumer pom.xml


        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        
    

spring-cloud-starter-openfeign是由spring-cloud-dependencies进行版本管理的,下面nacos注册和sentinel的版本由spring-cloud-alibaba-dependencies管理

bootstrap.yml

注意不能是application.yml

server:
  port: 9200
spring:
  application:
    # 应用名称
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: nacos服务器IP:8848
    sentinel:
      transport:
        dashboard: localhost:8718
feign:
  sentinel:
    enabled: true

到时候就直接访问localhost:9200就是consumer

RemoteService
@FeignClient(value = "nacos-provider", fallback = RemoteServiceFallback.class)
public interface RemoteService
{
    @GetMapping(value = "/echo")
    String echo();
}
RemoteServiceFallback

用在上面@FeignClient的fallback中,当sentinel发现流量超过后面自己设置的流控规则后,就会让feign走这个fallback

@Service
public class RemoteServiceFallback implements RemoteService
{
    @Override
    public String echo()
    {
        return "系统繁忙,请稍后";
    }
}
ConsumerController
@RestController
public class ConsumerController
{
    @Resource
    private RemoteService remoteService;

    @GetMapping(value = "/echo")
    public String echo() {
        return remoteService.echo();
    }
}
启动程序

加两个注解

//使用注册中心
@EnableDiscoveryClient
//获取注册中心的接口
@EnableFeignClients
Provider pom.xml

        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
    
  
bootstrap.yml
server:
  port: 9201
spring:
  application:
    # 应用名称
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: nacos服务器IP:8848
ProviderController
@RestController
public class ProviderController
{
    @GetMapping("/echo")
    public String echo() {
        System.out.println("有一个请求");
        return "来自Provider Demo";
    }
}
启动程序
@EnableDiscoveryClient
测试
    localhost:9200/echo疯狂刷新,每次都得到
    http://localhost:8718,账号密码sentinel,看到通过QPS,没有拒绝QPS添加流控规则,注意资源名为GET:http://nacos-provider/echo,修改一个阈值为2保存即可然后再回去狂刷新,就会看到有时提示实时监控也监控到了
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735091.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号