简介:什么是微服务?
就目前而言,对于微服务业界并没有一个统一的、标准的定义
但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于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,新建项目 二、选择maven,jdk,勾选使用模板,选择maven-archetype-site模板 三、选择项目存放的地址,填写Name和GroupId,其他的会自动填充
四、选择maven,我这里选的是idea自带的版本,也可以选择自己安装的maven,版本不要低于3.5,点击finish
五、创建完成后会看到以下的目录,然后把src目录整个删掉,到这里,一个父工程就搭建好了 六、修改一下idea的编译环境,进入设置 七、勾选启用注解 八、修改pom文件,打包方式改为pom,添加依赖(详细配置查看git地址)父工程创建完后,就开始建子工程,我们模拟一个经典的订单支付-消费的场景,后期会围绕这两个服务展开对各种组件的学习:
服务提供者 cloud-provider-payment
服务消费者 cloud-consumer-order
共通服务 cloud-api-commons
tips:考虑到后期服务会特别多,实体类的重复使用会造成很多冗余代码,这里抽出一个单独的服务来管理实体类以及一些共通的工具包等一、选中项目名右键新建Module
二、选择maven和jdk,这里有人喜欢选择Spring Initializer也可以,个人喜欢选择maven,因为这个创建出来的项目很干净,还有很多小细节也处理的好
三、填写项目名(因为我用的是mac版idea,win版界面略有差别,但是要注意名字不要搞错)
四、项目创建完以后,是一个标准的maven目录结构,没有springboot的相关文件,我们需要手动修改,先改pom文件,添加相关依赖(详细文件内容查看git地址)
五、找到resources目录,右键New->File->application.yml
修改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
修改主启动类
@SpringBootApplicationpublic class PaymentApplication { public static void main(String[] args) { SpringApplication.run(PaymentApplication.class, args); }}
七、然后在现有工程创建业务类,目录结构如下
八、建库建表,表结构如下,特别简单,两个字段
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工程因为不涉及业务流程,所以只需要创建实体类和工具包就可以
说明: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文件引入依赖
自己写个demo测试一下配置有没有成功,基本的springboot整合mybatis,这里不再赘述。
到这里,准备工作就完成了,接下来开始学习第一个组件:服务注册中心Eureka的配置与搭建
本项目已上传到gitee和github,地址在公众号窗口 我的->git 查看相关内容