SpringCloud Alibaba 微服务搭建
SpringCloud Alibaba 搭建
文章目录
- SpringCloud Alibaba 搭建
- 前言
- 一、环境搭建
- 二、项目搭建流程
-
- 1.Maven 引入库
- 2.安装nacos
- 3.spring cloud 项目集成 nacos
- 4.spring cloud 项目集成 Ribbon
- 5. sprig cloud 集成 openFeign
- 6. spring cloud alibaba sentinel
- 7. feign 整合 sentinel 实现容错
-
- sentinel 客户端安装
- 8. 网关
- 9. 服务链路追踪 sleuth + zipkin
- 总结
前言
本文使用的技术是springcloud alibaba + nacos + Ribbon + openFeign + sentinel + sleuth + zipkin
不了解可以返回上一篇文章
https://blog.csdn.net/qq_36611929/article/details/121115548?spm=1001.2014.3001.5502
一、环境搭建
搭建之前请先选好版本 spring cloud alibaba 和 springboot 的版本对应关系
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
二、项目搭建流程
1.Maven 引入库
创建maven父级项目,修改父级pom文件 !!!注意版本对应关系
代码如下(示例):
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.6.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR8</version><type>pom</type><scope>import</scope> </dependency> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.安装nacos
代码如下(示例):
下载nacos 官网地址 https://nacos.io/zh-cn/
启动命令(standalone代表着单机模式运行,非集群模式):Linux/Unix/Mac> sh startup.sh -m standalone Windows> startup.cmd -m standalone启动成功访问 localhost:8848/nacos
3.spring cloud 项目集成 nacos
添加nacos依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
在 application.properties 中配置 Nacos server 的地址
server.port=8070spring.application.name=service-provider // 注意不要用下划线_,会报错服务找不到spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
启动类添加注解
@SpringBootApplication@EnableDiscoveryClient //通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能public class NacosProviderApplication{...}
4.spring cloud 项目集成 Ribbon
添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency>
/** * 添加LoadBalanced,使RestTemplate以负载均衡的方式调用服务 * @return */@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
@Autowired private RestTemplate restTemplate; @GetMapping("/sayHello") public String sayHello(String name){ String url = "http://provider-service/hello?name=" + name; String result = restTemplate.getForObject(url , String.class); return result; }
负载均衡配置
更换负载均衡方式
@Bean // 方法一,通过配置文件方式 public IRule ribbonRule(){ return new RandomRule(); }
# 方法二,修改application.properties配置 product-goods.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
常用的策略
随机策略——RandomRule
轮询策略——RoundRobinRule Ribbon默认策略
重试策略——RetryRule
最低并发策略——BestAvailableRule
可用过滤策略——AvailabilityFilteringRule
响应时间加权策略——WeightedResponseTimeRule
每隔30秒计算一次服务器响应时间,以响应时间作为权重,响应时间越短的服务器被选中的概率越大。
区域权衡策略——ZoneAvoidanceRule
5. sprig cloud 集成 openFeign
一:添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
二:启动类添加注解
@EnableFeignClientspublic class OrderApplication{...}
三:添加接口 订单服务 >调用> 用户服务
@FeignClient(value = "product-users") //填写要调用的服务名称public interface UserService { @GetMapping("/user") // 服务下需要调用的接口 UserInfo queryUserInfo();}
6. spring cloud alibaba sentinel
第一步:每个服务模块导入maven依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
第二步: application.properties 文件添加配置信息
#sentinel控制台注册服务spring.cloud.sentinel.transport.dashboard=localhost:9090#是否取消控制台懒加载spring.cloud.sentinel.eager=true
7. feign 整合 sentinel 实现容错
修改项目配置文件
feign.sentinel.enabled=true # 开启feign对sentinel的支持
服务调用接口添加 fallback 异常处理类
@FeignClient(value = "product-goods",//fallback = GoodsServiceFallback.class,fallbackFactory = GoodsServiceFallbackFactory.class)public interface GoodsService { @GetMapping("/goods/") Goods getGoods(@RequestParam(name = "gId") String gId);}
编写异常处理类逻辑
@Componentpublic class GoodsServiceFallback implements GoodsService { @Override public Goods getGoods(String gId) { Goods goods = new Goods(); goods.setId("-100"); goods.setGoodName("错误信息返回结果"); return goods; }}
编写异常处理类逻辑并打印错误信息
@Slf4j@Servicepublic class GoodsServiceFallbackFactory implements FallbackFactory<GoodsService> { @Override public GoodsService create(Throwable throwable) { return gId -> { log.error("{}",throwable); Goods goods = new Goods(); goods.setId("-100"); goods.setGoodName("错误信息返回结果"); return goods; }; }}
sentinel 客户端安装
下载sentinel可视化工具 地址:https://github.com/alibaba/Sentinel/
使用文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
启动命令
java -Dserver.port=9090 -Dcsp.sentinel.dashboard.server=localhost:9090 - Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
8. 网关
spring cloud alibaba 集成 gateway
一:新建 spring boot 项目
1:Gatway必须需要SpringBoot2.X才能支持2:Gatway底层依赖实现Netty和WebFulx,不同于我们servelt编程模型。3:我们不能以tomcat这类容器来运行,建议打包成jar包运行。4:pom文件(不能引入web包)
二:导入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency></dependencies>
三:启动类添加注解
@EnableDiscoveryClient
四:添加yml配置
server: port: 7000spring: application: name: api-gateway cloud: nacos: discovery: server-addr: localhost:8848 # 注册gateway gateway: discovery: locator: enabled: true # 允许gateway 从 nacos 获取服务信息# 路由配置 不是必须配置 有自己默认实现 默认实现访问地址为: ip:${server.port}/访问的服务名称/路径 routes: - id: ${spring.application.name} #路由的id,保证唯一就行,常用服务名称 uri: lb://product-goods #想要代理的路由接口 lb 负载均衡 lb://服务名称 order: 1 #优先级 越小优先级越高 predicates: #断言:路由跳转需要满足的条件 - Path=/** filters: # 在请求之前,对请求路径,信息做操作
9. 服务链路追踪 sleuth + zipkin
一:父工程导入依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency></dependencies>
二:在每个父工程配置中添加下面配置
#zipkin 服务的请求地址spring.zipkin.base-url=http://localhost:9411# 让 nacos 把它当作 URL 而不是服务spring.zipkin.discovery-client-enabled=false# 采样比例 1.0 也就是全部都需要 范围值 0 ~ 1spring.sleuth.sampler.probability=1.0
三:数据持久化
执行mysql脚本 文档上面有
https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/mysql-v1
四:下载zipkin ui模块
https://github.com/openzipkin/zipkin
五:启动命令
启动ui界面
不持久化启动java -jar zipkin-server-*-exec.jar 持久化启动java -jar zipkin-server-*-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=root
总结
以上就是今天要讲的内容,本文仅仅简单介绍了springcloud alibaba.