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

简介:什么是微服务?

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

  • 但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于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 查看相关内容


版权声明:本文为weixin_39850920原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。