搭建微服务_从零开始搭建一整套微服务

本文介绍了微服务的定义和特性,强调了版本匹配在构建微服务项目中的重要性。文章以一个具体的微服务项目为例,详细阐述了如何使用Spring Boot 2.3.6和Spring Cloud Hoxton.SR9搭建服务提供者、服务消费者和共通服务,包括创建Maven项目、配置依赖、编写YAML文件、创建业务类以及数据库建模。最后,作者提醒读者完成准备工作后,可以开始学习服务注册中心Eureka的配置与搭建。
摘要由CSDN通过智能技术生成

简介:什么是微服务?

  • 就目前而言,对于微服务业界并没有一个统一的、标准的定义

  • 但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

以上是业界大佬Martin Fowler的原话,算是目前对微服务最好的诠释,这个问题也经常被面试官提到,所以这段话还是必须得记下来。


前言:由于springcloud的更新特别频繁,而且springboot和springcloud版本之间有相互依赖关系,如果版本不匹配,会发生很多奇怪的异常(这个问题特别恶心,我被这个坑过很多次),且后续我们还会在此项目中整合一系列第三方框架,都对版本依赖比较强,所以开始创建项目之前,声明一下本项目的开发环境:

  • springboot: 2.3.6

  • springcloud: Hoxton.SR9

  • jdk: 1.8

  • maven: 3.6.x

  • idea: 2020.2.1

tips:如果不想用此版本的springboot,可以在官网查询对应的版本依赖关系,根据自己需要选择合适的版本。

依赖关系:

https://start.spring.io/actuator/info

spring官网:

https://spring.io/projects


后期我会采用maven父子结构来搭建微服务,便于jar包管理,接下来开始创建一个maven父工程一、打开idea,新建项目

e24a940d1cc836ff7c758d621e05ecd9.png

二、选择maven,jdk,勾选使用模板,选择maven-archetype-site模板

5e1279274785c8e7c73d43ee01328a9c.png

三、选择项目存放的地址,填写Name和GroupId,其他的会自动填充

eb0b968c512aaf6388dc44c00d73bd55.png

四、选择maven,我这里选的是idea自带的版本,也可以选择自己安装的maven,版本不要低于3.5,点击finish

61d44b0ac0e568b7f5076a0198359d06.png

五、创建完成后会看到以下的目录,然后把src目录整个删掉,到这里,一个父工程就搭建好了

ec1ea5e0125c97de46ce3b66acd8b709.png

六、修改一下idea的编译环境,进入设置

313bae1a8c0561643f4ececafb5223ff.png

七、勾选启用注解

2ffadf3179030b0fb7dfd945f4416daf.png

八、修改pom文件,打包方式改为pom,添加依赖(详细配置查看git地址) 1aa996eb5cc3d0c6bcae77d0f9333f6b.png
父工程创建完后,就开始建子工程,我们模拟一个经典的订单支付-消费的场景,后期会围绕这两个服务展开对各种组件的学习:

服务提供者  cloud-provider-payment

服务消费者  cloud-consumer-order

共通服务      cloud-api-commons

tips:考虑到后期服务会特别多,实体类的重复使用会造成很多冗余代码,这里抽出一个单独的服务来管理实体类以及一些共通的工具包等

一、选中项目名右键新建Module

fca90083f99e9bce87920d97bafb82b4.png

二、选择maven和jdk,这里有人喜欢选择Spring Initializer也可以,个人喜欢选择maven,因为这个创建出来的项目很干净,还有很多小细节也处理的好

e70c095c53046e5aa91d2914cbd8a25c.png

三、填写项目名(因为我用的是mac版idea,win版界面略有差别,但是要注意名字不要搞错)

be7369752b9cdfb290bbc0cc5d7d78f8.png

四、项目创建完以后,是一个标准的maven目录结构,没有springboot的相关文件,我们需要手动修改,先改pom文件,添加相关依赖(详细文件内容查看git地址)

369b3a743dfd4e499213ad9147f3e785.png

五、找到resources目录,右键New->File->application.yml

565950596d470d7b47f8bd4563834a4e.png

    修改yml文件内容

server:  port: 8001spring:  application:    name: cloud-provider-payment  datasource:    type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型    driver-class-name: com.mysql.jdbc.Driver   #mysql驱动包    url: jdbc:mysql://localhost:3306/springcloud?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false    username: root    password: 123456mybatis:  mapper-locations: classpath:mapper/*.xml

六、找到java目录,右键New->Java Class

a0c2a7a6ca96dcaefe8078fe1f9054e2.png

66722e950285791f87d99a6ce6a4a6cc.png

   修改主启动类

@SpringBootApplicationpublic class PaymentApplication {  public static void main(String[] args) {    SpringApplication.run(PaymentApplication.class, args);  }}

七、然后在现有工程创建业务类,目录结构如下

77e6aa412b543abd908636097f5d4f37.png

八、建库建表,表结构如下,特别简单,两个字段

SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for payment-- ----------------------------DROP TABLE IF EXISTS `payment`;CREATE TABLE `payment` (  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',  `serial` varchar(200) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;SET FOREIGN_KEY_CHECKS = 1;

九、按照上面的流程,创建工程cloud-consumer-order及相关的业务类,cloud-api-commons工程因为不涉及业务流程,所以只需要创建实体类和工具包就可以

52eb057290765fabad4826d56e853991.png

说明:CommonResult是一个包装类,方便与前端数据交互

@Data@AllArgsConstructor@NoArgsConstructorpublic class CommonResult<T> {  private Integer code;  private String message;  private T data;  public CommonResult(Integer code, String message){    this(code,message,null);  }}

十、cloud-api-commons工程创建完以后,执行maven install,就可以在其他两个工程的pom文件引入依赖

b883591561ab745c4bfef850d378b206.png

自己写个demo测试一下配置有没有成功,基本的springboot整合mybatis,这里不再赘述。

到这里,准备工作就完成了,接下来开始学习第一个组件:服务注册中心Eureka的配置与搭建5332cad20a3051e12aa30c09f239a1c6.png

本项目已上传到gitee和github,地址在公众号窗口 我的->git 查看相关内容

序言 自从Martin Fowler对微服务作出定义之后,微服务便火遍大江南北, 网上出现很多文章来描述它的好处,也有很多文章来说明它的弊端。这便 让很多小伙伴无所适从,微服务究竟是什么,要不要使用微服务架构,怎 么实施微服务架构?我一直认为,微服务架构只是新瓶装老酒,这老酒就 是模块化。如果在做系统设计时,已经把模块化做得很好,转型微服务只 是顺理成章的事。如果模块化都做不好,转型微服务只会带来灾难。 2014 年底,我们团队意识到 Docker 技术可以帮我们大幅度提高软 件产品的性能,降低硬件的投入,提高运维效率,便开始着手研发基于 Docker 的 PaaS 平台。随后,很快发现,PaaS 平台只是解决了软件生命周 期后半部分(运维)的问题,就思考能否通过 Docker 技术来提高开发团 队的效率。例如,降低团队成员流动带来的风险,提高多团队协作的效率, 找到组件或知识积累的方法,让同一个软件产品能够适应不同客户的定制 化需求,等等。从此,就与微服务结下了不解之缘。这些目标确定后,通 用的PaaS平台的研发目标也就变成了解决以上问题的微服务平台的研发, 以及后来的青柳云平台本身的微服务化的实践。 在做微服务架构技术选型的时候,我们以“无侵入”和“社区活跃” 为最主要的考量点,也只有这样,将来在升级为原子服务架构、量子服务 架构的时候,甚至是恢复成单体架构的时候,代价才是最小的。所以,在 3 InfoQ 中文站 为数不多的可选项中,我们拥抱了 Spring Cloud。最后的结果就是使用 基于 Docker 的微服务平台进行开发和运行运维支撑,使用 Spring Cloud 进行业务系统开发,两者相互独立,并可被独立替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值