需求项目结构图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.jarnacos准备
网上搜一下吧,云服务器记得开8848,9848,9849端口
根模块内容 pom.xmlspring 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 //获取注册中心的接口 @EnableFeignClientsProvider pom.xml
bootstrap.ymlcom.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
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保存即可然后再回去狂刷新,就会看到有时提示实时监控也监控到了



