SpringCloud Alibaba 微服务搭建

SpringCloud Alibaba 搭建


前言

本文使用的技术是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>

<!--  导入spring-cloud依赖和spring-cloud-alibaba依赖-->
  <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依赖

<!-- 添加nacos依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在 application.properties 中配置 Nacos server 的地址

server.port=8070
spring.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
	@LoadBalanced
	public 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>

二:启动类添加注解


@EnableFeignClients
public 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);
}

编写异常处理类逻辑

@Component
public class GoodsServiceFallback implements GoodsService {
    @Override
    public Goods getGoods(String gId) {
        Goods goods = new Goods();
        goods.setId("-100");
        goods.setGoodName("错误信息返回结果");
        return goods;
    }
}

编写异常处理类逻辑并打印错误信息

@Slf4j
@Service
public 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>
   <!-- 网关注册到nacos 需要的依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

三:启动类添加注解

@EnableDiscoveryClient

四:添加yml配置

server:
  port: 7000
spring:
  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 ~ 1
spring.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.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值