十一. SpringCloud Alibaba (7)

执行方式

./startup.sh -p 3333 ./startup.sh -p 4444 ./startup.sh -p 5555 #注意:提示服务器内存不够,可以把nacos启动脚本里-Xms和-Xmx jvm内存调整小一点 # 同时通过window浏览器访问: :3333/nacos/#/login :4444/nacos/#/login :5555/nacos/#/login

Nginx的配置,由它作为负载均衡器

修改Nginx的配置文件Nginx.conf

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream cluster { server 127.0.0.1:3333; server 127.0.0.1:4444; server 127.0.0.1:5555; } server { listen 1111; server_name localhost; location / { # root html; # index index.html index.htm; proxy_pass ; } } }

按照指定配置文件启动Nginx

cd /usr/local/nginx/sbin ./nginx -c /opt/nginx/conf/nginx.conf

开始测试

测试通过Nginx访问Nacos:http//192.168.42.82:1111/nacos/#/login,成功访问!

新建一个配置测试数据库,Linux服务器的MySQL也插入一条记录!

微服务测试

微服务springalibaba-provider-payment9002启动注册进nacos集群

yml配置文件

server: port: 9002 spring: application: name: nacos-payment-provider # 微服务名称 cloud: nacos: discovery: # server-addr: localhost:8848 # 配置Nacos地址 # 换成Nginx的1111端口,做集群 server-addr: 192.168.42.1:1111 management: endpoints: web: exposure: include: '*' # 监控端点全部打开

结果:成功启动!

高可用总结

image-20210305235136270

5. Sentinel熔断与限流 5.1 Sentiel简介

官网

主要特性

image-20210306145730077

与Hystrix对比

Hystrix需要我们自己手工搭建监控平台,没有一套Wbe界面可以给我们进行更加细粒度化的配置,流控,速率控制,服务熔断,服务降级。

Sentinel单独一个组件,可以独立出来。直接界面化的细粒度统一配置。

Sentiel可以解决的问题

服务雪崩

服务降级

服务熔断

服务限流

...

5.2 安装Sentiel控制台

Sentinel分为两部分:

核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo / Spring Cloud等框架也有较好的支持。

控制台(Dashboard)基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器.

下载

运行命令

# 前提:Java8环境,8080端口不被占用 java -jar sentinel-dashboard-1.7.0.jar

访问Sentinel管理界面

:8080

登陆账号密码均为sentinel

5.3 初始化演示工程

启动Nacos8848,:8848/nacos/#/login

新建Moudle:cloudalibaba-sentinel-service8401

pom.xml

<!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--SpringCloud ailibaba sentinel-datasource-nacos 后续做持久化用到--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> <!--SpringCloud ailibaba sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--其他基础包-->

yml配置文件

server: port: 8401 spring: application: name: cloudalibaba-sentinel-service cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务注册中心地址 sentinel: transport: dashboard: localhost:8080 # 配置Sentinel dashboard地址 # 默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口 port: 8719 datasource: ds1: nacos: server-addr: localhost:8848 dataId: cloudalibaba-sentinel-service groupId: DEFAULT_GROUP data-type: json rule-type: flow management: endpoints: web: exposure: include: '*' feign: sentinel: enabled: true # 激活Sentinel对Feign的支持

主启动

@EnableDiscoveryClient @SpringBootApplication public class MainApp8401 { public static void main(String[] args) { SpringApplication.run(MainApp8401.class, args); } }

业务类FlowLimitController

@RestController @Slf4j public class FlowLimitController { @GetMapping("/testA") public String testA() { return "==> testA"; } @GetMapping("/testB") public String testB() { log.info(Thread.currentThread().getName() + "\t" + "==> testB"); return "==> testB"; } }

启动Sentinel8080,启动微服务8401

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpszdz.html