欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

nacos+sentinel+openfeign实现流控Demo

时间:2023-06-17
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.RELEASEspring-cloud-dependencies Hoxton.SR9spring-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: 9200spring: application: # 应用名称 name: nacos-consumer cloud: nacos: discovery: # 服务注册地址 server-addr: nacos服务器IP:8848 sentinel: transport: dashboard: localhost:8718feign: 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

@Servicepublic class RemoteServiceFallback implements RemoteService{ @Override public String echo() { return "系统繁忙,请稍后"; }}

ConsumerController

@RestControllerpublic 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: 9201spring: application: # 应用名称 name: nacos-provider cloud: nacos: discovery: # 服务注册地址 server-addr: nacos服务器IP:8848

ProviderController

@RestControllerpublic 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保存即可然后再回去狂刷新,就会看到有时提示实时监控也监控到了

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。