> 文档中心 > SpringCloud Alibaba 微服务搭建

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.