spring cloud alibaba 项目从搭建到自动部署全部流程

环境

版本说明
Spring-Boot 2.2.5.RELEASE
Spring-Cloud Hoxton.SR3
Spring-Cloud-Alibaba 2.2.1.RELEASE
Java JDK1.8

组件

  • 服务限流降级:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
  • 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 分布式任务调度(xxl-job-admin):提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker(schedulerx-client)上执行。

项目结构

业务模块结构:

  • 项目名

    • 一级模块

      • 二级模块(实体类)

        • src目录

        • pom.xml(二级模块配置)

      • 二级模块(提供服务)

        • src目录

        • pom.xml(二级模块配置)

      • pom.xml(一级模块配置)

    • pom.xml(主配置)

特殊模块:

  • 项目名
    • bom模块(第三方jar包统一管理)
    • common(公共组件)
    • gateway(网关)

maven环境配置

配置私服环境

本地的apache-maven-3.6.3安装路径下的/conf/settings.xml配置文件中配置如下:

<servers>
	<server>
		<id>releases</id> 
		<username>admin</username>
	   <password>123456</password>
	</server>
	<server>
		<id>snapshots</id> 
		<username>admin</username>
	   <password>123456</password>
	</server>
</servers>

<profiles>
	<profile>
		<id>nexus</id>
		<repositories>
			<repository>
				<id>releases</id>
				<url>http://127.0.0.1:8080/repository/maven-releases/</url>
				<releases><enabled>true</enabled></releases>
				<snapshots>
					<enabled>true</enabled>
					<updatePolicy>always</updatePolicy>
				</snapshots>
			</repository>
			<repository>
				<id>snapshots</id>
				<url>http://127.0.0.1:8080/repository/maven-snapshots/</url>
				<snapshots>
					<enabled>true</enabled>
					<updatePolicy>always</updatePolicy>
				</snapshots>
			 </repository>
		</repositories>
		<pluginRepositories>
			<pluginRepository>
				<id>releases</id>
				<url>http://127.0.0.1:8080/repository/maven-releases/</url>
				<releases><enabled>true</enabled></releases>
				<snapshots>
					<enabled>true</enabled>
					<updatePolicy>always</updatePolicy>
				</snapshots>
			</pluginRepository>
			<pluginRepository>
				<id>snapshots</id>
				<url>http://127.0.0.1:8080/repository/maven-snapshots/</url>
				<snapshots>
					<enabled>true</enabled>
					<updatePolicy>always</updatePolicy>
				</snapshots>
			</pluginRepository>
		</pluginRepositories>
	</profile>
</profiles>

<activeProfiles>
	<activeProfile>nexus</activeProfile>
</activeProfiles>

maven依赖关系

继承顺序从高到低: 主配置 >> bom配置 >> 一级模块配置 >> 二级模块配置

解决maven依赖重复依赖问题

首先在bom引入maven配置, 例如:

<properties>
	<gson.version>2.8.5</gson.version>
</properties>

<dependencyManagement>
	<dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>${gson.version}</version>
    </dependency>
</dependencyManagement>

再到需要引入gson包的服务pom配置文件中引入:

注意

  1. 不需要引入版本标签
  2. 避免冗余配置
<dependencies>
	<dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
</dependencies>

maven打包

有三种打包方式:

  1. 一键打包所有模块, 并发布到私服, 执行顺序选择***-cloud(root): 运行clean, 再运行deploy
***-cloud(root) > clean > deploy
  1. 一级模块打包, 包括该模块对应的二级模块也一起打包, 并发布到私服
***-user > clean > deploy
  1. 二级模块打包

配置文件application.yml和bootstrap.yml

在bootstrap.yml文件中配置了端口, 环境, 应用名, dubbo相关配置, nacos注册中心和配置中心相关配置

application.yml中的配置都在配置中心配置了, 包括mysql, redis, mybatis plus, 日志等等

注册服务和服务发现

  • 注册服务使用@Service注解, org.apache.dubbo.config.annotation.Service, 建议配合@Component注解一起使用
  • 服务发现使用@Reference(check = false)注解, org.apache.dubbo.config.annotation.Reference, check=false表示运行服务不需要检查是否有服务提供者

如何查找对应服务的呢, 是根据上面两个注解中提供的参数配置和默认的环境配置关联的, 例如: version=1.0 则两边都要配置相同的参数值, group同理, 解决一对多接口实现方案

网关路由

统一请求路径格式 ip:port/api/v1/服务名前缀/*

监控,限流,降级和熔断

已经集成了sentinel组件, 默认所有接口都会限流, 请求的接口会在实时监控显示QPS和响应时间.

使用场景:

  • 防止系统负载内存溢出, 可以通过限流平衡
  • 特殊接口需要限流降级处理, 例如: 获取验证码接口, 一个用户,一分钟内只能获取一次
  • 秒杀活动等, 需要限流请求访问的数量
  • 限制爬虫频繁访问, 对IP或用户进行限流

动态配置规则:

  • 在配置中心nacos, 持久化了配置规则, 同时可以动态修改配置规则
  • 在sentinel dashboard, 修改规则暂时无法同步规则到配置中心, 但可以实现

限流和熔断后调用方法配置:

  • 在controller类方法加上注解 @SentinelResource(value=“路由绝对路径(必须是唯一的值)”, blockHandler=“方法名”, blockHandlerClass= 类名)
  • 上一步是埋点, 需要配置规则才能生效, 规则在配置中心配置

全局配置:

  • BlockExceptionHandler 实现限流统一返回信息
  • UrlCleaner 实现资源清洗, 对/getById/{id} 这样的URL, 需要配置返回为 /getById/*, 减少资源数量

自动化部署

使用jenkins配置并实现

同步执行步骤: 构建*** - 构建***-user-service(指定需要构建的服务模块)

说明

详细代码以后会附带上github链接, 见谅见谅

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值