【Java开发】Spring Cloud 02 :微服务项目介绍及开发环境

news2025/4/6 20:36:13

了解完 Spring Cloud 的发展背景以及各个组件库后,在敲代码前,本章节会聊一聊优惠券平台项目的整体功能和模块,以及每个功能点的技术选型和背后的依据,最后讲解下搭建项目所需的开发环境~

目录

1 优惠券平台项目

1.1 项目介绍

1.2 Spring Boot 实战规划

1.3 Spring Cloud 实战规划

① 第一阶段

② 第二阶段

③ 第三阶段

2 开发环境介绍

2.1 Java 和 Maven

2.2 IntelliJ IDEA

2.3 MySQL 和 DB 可视化工具

2.4 Redis


1 优惠券平台项目

1.1 项目介绍

整个项目划分为了优惠券模板服务、计算服务、用户服务和平台类组件这四大模块。它们的功能是这样的:

  • 优惠券模板服务:模板规则是创建具体优惠券的前置条件,每种类型的模板都是一个计算公式,这个公式约定了优惠计算的方式。在这个项目中,模板服务实现了模板规则的创建、克隆、分页查找等功能,并且项目里定义满减、随机立减、满折、晚间双倍优惠等多种券模板类型。
  • 优惠计算服务:这个模块是根据用户购物车中的商品信息(单价、数量、所属门店)和优惠券信息,来计算当前订单优惠后的价格。另外,如果用户有多张优惠券,还提供了“优惠金额试算”服务,帮助用户挑选最省钱的优惠券。
  • 用户服务:这是暴露给外部用户使用的接口,它依赖于模板服务和优惠计算服务完成底层逻辑,主要业务场景是用户领券、订单价格试算、下单核销和订单金额试算等功能。
  • 平台类组件:主要包括一些业务无关的中心化组件,比如 Gateway 网关等等,你将在 Spring Cloud 课程中逐渐接触到平台类组件的搭建。

从整体来看,优惠券模板服务和优惠计算服务是基础服务,用户服务是对用户开放的接口,它依赖于这两个基础服务来完成业务逻辑。而平台类组件则提供了横向的微服务特性支持,比如微服务网关、链路追踪功能等等,你可以把它们理解为“微服务中间件”。我们通过下面这幅图来看一下这四个模块之间的关联关系:

1.2 Spring Boot 实战规划

微服务框架基于 Spring Boot 项目,因此首先便是搭建 Spring Boot 业务模块,并按照模块之间的先后依赖顺序进行改造。Spring Boot 的阶段,用户服务是一个“超级单体应用”,优惠券模板服务和订单优惠计算服务都将打包到用户服务中,跨模块的服务调用都是通过本地方法完成的,因此只用启动用户服务就可以执行所有模块的业务功能。

搭建 Spring Boot 项目的过程中,涉及以下三个技术点:

  • 项目搭建:分层构建项目结构,并借助 Maven 实现依赖项管理
  • 数据操作:将使用 mybatis-plus 替代 spring-data-jpa,分别通过 Mapper、Iservice、自定义 SQL 三种方式实现数据库 CRUD 操作
  • 开放对外 API:快速入门 spring-web 实战,通过注解对外暴露 RESTful 风格的 API

在 Spring Boot 阶段搭建好优惠券平台的单体应用后,接下来就可以进行 Spring Cloud 微服务化改造了。

1.3 Spring Cloud 实战规划

根据微服务学习的路径以及各个组件的难易程度,本专栏主要分为三个不同的阶段:

  • 第一阶段:搭建基础的微服务功能,实现微服务之间的通信
  • 第二阶段:为各个模块构建服务容错、分布式配置中心、分布式链路追踪能力
  • 第三阶段:进一步实现微服务网关、消息驱动和分布式事务。下面我们来看下每个阶段主要做些什么以及对应的技术选型

① 第一阶段

主要实现微服务之间的通信,将用户微服务、优惠券模板服务和订单优惠计算服务拆分为独立部署的业务系统,通过注册中心来实现服务注册和服务发现,让各个微服务之间可以互相调用。这个阶段涉及的关键技术是 Nacos 注册中心、Loadbalancer 客户端负载均衡组件和 OpenFeign 服务间调用组件。

微服务之间的服务通信有一个前提条件,就是你要知道将要调用的服务器地址是什么。这个寻址的任务是交由 Nacos 注册中心和 Loadbalancer 负载均衡器共同来完成的。

Nacos 是 Alibaba 出品的服务治理组件,它作为一个注册中心组件,负责收集所有服务节点的地址信息并维护服务注册表,所有服务上线之后都会向它汇报状态。Loadbalancer 则承担了负载均衡的任务,在客户端发起服务调用的时候,它会负责从 Nacos 的注册表中挑选一台目标服务器。而 OpenFeign 组件是一个“锦上添花”的组件,它能够简化基于 HTTP 的远程服务调用,让我们就像使用本地接口一样方便地发起远程服务调用。

至于为什么会选择 Nacos+Loadbalancer 作为选型方案呢?其实,在早期版本的 Spring Cloud 微服务架构选型中,Eureka + Ribbon 是一个使用最为广泛的组合,它们是 Netflix 公司贡献给 Spring Cloud 项目的服务治理 + 负载均衡组件。但是考虑到 Netflix 正在退出 Spring Cloud 的历史舞台。Eureka 和 Ribbon 已经进入了维护状态。其中,Ribbon 更是在 Spring Cloud I 版之后,就从官方组件库中被移除了。这意味着 Eureka 和 Ribbon 已经进入了“暮年”,不会再有重大的功能更新。

因此,在考虑技术选型的时候,我选择了后劲更足、功能更为强大的 Nacos 和 Spring Cloud 官方开源的 Loadbalancer 组件。大致来讲,在第一阶段,分为三个部分来带你搭建起微服务之间的通信:

  • 服务治理:服务治理的重点是搭建基础的跨服务调用功能。我会把用户服务、优惠计算服务和订单服务改造成可以独立启动的微服务,并借助 Nacos 的服务发现功能,通过 Webflux 组件中的 WebClient 实现基于 HTTP 的跨服务间的调用
  • 负载均衡:在这部分,我们将在服务治理的基础上,引入 Loadbalancer 组件为跨服务调用添加负载均衡的能力。除此之外,我会对 Loadbalancer 组件的扩展接口做自定义开发,实现一个金丝雀测试的负载均衡场景
  • 简化服务调用:我将使用 OpenFeign 组件对用户服务进行改造,将原先复杂的 WebClient 调用替换为简洁的 OpenFeign 调用

② 第二阶段

  • 利用服务容错提高微服务架构的可用性
  • 搭建全链路的分布式链路追踪能力
  • 实现统一的配置管理和动态属性推送

这个阶段涉及的技术组件是 Nacos Config、Sentinel、Sleuth+Zipkin+ELK。

③ 第三阶段

  • 搭建微服务网关作为统一流量入口
  • 使用消息驱动组件对接 RabbitMQ
  • 通过分布式事务保证数据一致性

这个阶段涉及的技术组件是 Gateway、Stream 和 Seata。

2 开发环境介绍

工欲善其事,必先利其器,搭建好项目的开发环境是很有必要的~

为了避免在项目实战环节碰到一些棘手的兼容性问题,开始写代码前就要约定好各个组件的安装版本,包括 Java、Maven 和各个中间件的版本。

本章节主要讲集成开发环境的搭建、数据库的安装和 DB 脚本的导入。

2.1 Java 和 Maven

  • Java:推荐使用 JDK8 最新小版本或者 OpenJDK16 的最新小版本
  • Maven:推荐使用 Maven 3.6 或以上的版本

由于国内网络访问 Maven 中央仓库比较慢,在编译项目的时候,你会发现下载 Maven 依赖项的时间会比较久,这样的话可以修改 Maven 的 settings.xml 文件,将其默认镜像指向国内的镜像(比如阿里云镜像),这样可以大大加快依赖项下载速度。

安装完 Java 和 Maven 之后,我们再来安装集成开发工具。

2.2 IntelliJ IDEA

本人还是推荐用 IDEA,当然 Eclipse 等其他编译器也可~

你可以在 JetBrains 的官网(IntelliJ IDEA)下载 IntelliJ IDEA,IDEA 的免费社区版足够完成复杂的开发任务了。

2.3 MySQL 和 DB 可视化工具

可以在本地安装 MySQL,我是直接在云服务器上安装了 MySQL,如果你还没有安装可视化 DB 工具,那么我推荐你使用 dbeaver,毕竟是免费的 。相关链接 :Docker 环境下安装 Mysql

2.4 Redis

Redis 是一个 key-value 数据库,我们在学习微服务网关的时候将会用 Redis 实现网关层限流。

相关链接:云服务器 Docker 环境下安装 Redis

到这里,我们的工具安装就结束了,建议大家实操安装下这些软件,可以说都是开发的必备工具,如果有不明白的百度即可。

后续进入到 Spring Cloud 微服务实战环节的时候,我们还会用到更多的中间件,比如注册中心、微服务网关、链路追踪组件、ELK 日志查询系统、分布式事务协调器等等,到时候可再安装这些软件。


总结

大家如果有疑问都可以评论提出,有不足之处请大家批评指正,希望能多结识这方面的朋友,共同学习、共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux安装软件详解系列]05 安装ElasticSearch和IK分词器

目录1、安装ElasticSearch2、安装IK分词器操作系统:Anolis OS 8.6 RHCK 64位、jdk1.8。ElasticSearch:v6.8.6下载文件: ElasticSearch v6.8.6: https://elastic.co/downloads/elasticsearch IK分词器 v6.8.6:https://g…

脚本-简单脚本

脚本执行顺序 默认脚本是无序执行,也就是哪个脚本先执行,哪个脚本后执行是未知的。 也可以手动指定执行顺序, 在如上图所示中,可以点击 加号 按钮,然后添加脚本的顺序,数值越大,执行顺序越靠后…

为什么团队执行力差,管理者应该如何解决?

没有执行力,一切都是空谈。团队执行力差可能是这些原因: 1、目标不明确,项目方向不清晰。 2、责任不清,不知道干啥,也不知道为什么而干。 3、技能不熟练,没有明确的完成标准。 4、分配任务,…

【JavaScript】飞机大战

文章目录一、效果演示设计思路二、鼠标版飞机大战代码展示1.HTML结构代码2.CSS样式代码3.JavaScript代码js.js文件plane.js文件三、键盘版飞机大战代码展示1.HTML结构代码2.CSS样式代码3.JavaScript代码四、代码资源分享一、效果演示 利用html,css,js制…

华为云服务器上部署war包(虚拟机也同样适用)

目录linux部署war包安装jdk关闭防火墙简单粗暴(推荐虚拟机使用)复杂但安全(推荐服务器使用)安装tomcat部署war包linux部署war包 安装jdk 执行命令查看可安装java版本 yum -y list java*执行命令安装jdk8 yum install -y java-…

12. 爬虫训练场项目,jinja2 模板继承,项目继续迭代

本篇博客我们将前端模板的通用部分进行抽离,便于整理管理,使用的是 jinja2 中模板继承相关技术。 文章目录Flask 模板引擎块(Block)更细的块拆解完善 general 目录和 school 目录 HTML 文件宏(Macro)Flask …

章节六:RASA NLU组件介绍--特征生成器

目录一、前言二、特征生成器MitieFeaturizerSpacyFeaturizerConveRTFeaturizerLanguageModelFeaturizerRegexFeaturizerCountVectorsFeaturizerLexicalSyntacticFeaturizer一、前言 RASA在处理对话时,整体流程是pipeline结构,自然语言理解(N…

SpringBoot操作Redis

目录 1.IDE创建一个maven项目 2、 添加redis启动器 3.修改配置文件application.properties 4.在测试类中测试 SpringBoot操作Hash(哈希) SpringBoot操作List集合类型 SpringBoot操作Set集合类型 SpringBoot操作ZSet集合类型 1.IDE创建一个maven项…

dubbo(尚硅谷)学习笔记2

我们现在来做dubbo和springboot整合: 我们先来创建一个springboot项目: 然后把serviceimpl层拷贝过来。 因为我们这个也需要用到公用接口和实体类,所以还是需要导入一下这个依赖: 同样的我们也需要创建一个服务的消费者&#xf…

设计模式之美总结(行为型篇)

title: 设计模式之美总结(行为型篇) date: 2022-12-26 17:25:29 tags: 设计模式 categories:设计模式 cover: https://cover.png feature: false 文章目录1. 观察者/发布订阅模式(Observer Design Pattern/Publish-Subscribe Design Pattern…

Unity2D像素游戏开发——Aseprite简单人物绘画+动画制作导出精灵表示例

目录 前言 什么是帧? 什么是Aseprite? 运行环境 正文 示例:绘制人物 制作多帧动画 微调 导出精灵表 总结 作品欣赏 附一个下载链接: 前言 什么是帧? 我们看到的动画都是由一张张图片连续播放而成的&#…

scipy

scipy.interpolate插值方法 import numpy as np def func(x, y):return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2grid_x, grid_y np.mgrid[0:1:100j, 0:1:200j]rng np.random.default_rng() points rng.random((1000, 2)) values func(points[:,0], points[:…

高颜值蓝牙耳机有哪些?音质好颜值高的蓝牙耳机推荐

喜欢安静的人们,相信都会有一副蓝牙耳机吧,作为我们生活当中必不可少的数码产品,除了手机以外,蓝牙耳机几乎也是使用率很高的,它通过蓝牙连接,非常方便,下面是小编精心挑选的四款蓝牙耳机。 一…

告别“限速”,个人网盘进入云时代

配图来自Canva可画 在数字经济广泛渗透的条件下,个人网盘市场也得到了长足发展。而在5G和AI的加持下,个人网盘不断进行技术融合和迭代,云盘已然成为互联网用户以及智能设备存储的基本服务,而其应用场景也顺理成章地开始向各个细分…

window11 node.js 安装与下载

最近电脑莫名其妙的被一些恶意流氓软件捆绑了,今天我直接给恢复出厂设置了。顺便记录一下软件的安装步骤。 1. 先去官网下载 官网地址 ① 进入到官网后如下图所示 ②根据自己电脑选择合适的版本下载(我是wiindows 64位 ) ③ 双击安装包点击…

道路交通警示牌数据集以及训练好的YOLO模型权重文件

道路交通警示牌yolo模型1.交通标志数据集的介绍2.训练出权重文件1.交通标志数据集的介绍 交通标志(国外的交通标志)数据集是经过标注过的数据集,包括77个类别;标注类别如下: ‘200m’, ‘50-100m’, ‘Ahead-Left’, …

如何写好一份数据分析报告?

数据分析报表怎么做?这是一个很笼统的问题,所以这篇尝试从数据分析报表的3个方面来说下,准备了3天,内容较长,心急的小伙伴先看索引: 数据分析报表的原则数据分析报表的数据来源数据分析报表的可视化展示 0…

【按钮的两种状态 Objective-C语言】

一、继续上一篇文章的按钮案例 1.先说思路: 1)先把最上面的图片按钮实现了 我们拽1个按钮,给它一个背景图,加一个文字“点我啊” 当你鼠标按下去的时候,换成另1个背景图 当你鼠标按下去的时候,按钮的背景图变了,并且上面的文字也变了,变成“摸我干啥” 当你鼠标抬起…

Doris-集成其他系统(四)

目录0、准备1、Spark 读写 Doris1.1 准备 Spark 环境1.2 使用 Spark Doris Connector1.2.1 SQL 方式读写数据1.2.2 DataFrame 方式读写数据(batch)1.2.3 RDD 方式读取数据1.2.4 配置和字段类型映射1.3 使用 JDBC 的方式(不推荐)2、…

京东零售大数据云原生架构实践

通常谈到大数据,想到的是大数据平台、Hadoop生态或者数据湖技术,关注于大数据存储、大数据计算方向上的技术发展与应用;谈到云原生,想到的是微服务架构、容器化或者SRE(Site Reliability Engineer)运维范畴…