目录
微服务
首先了解什么是微服务。对比单体应用架构,把一个项目打包部署到一个服务器上。
微服务架构是把多个小项目打包部署到多个服务器上。
作用:面向互联网用户,抖音,淘宝,天猫...... 带来的问题:高并发,高可用,高性能
适合用于大型项目,面向互联网用户。
微服务优点:
1,单个项目复杂性降低
2,提高版本迭代频率,项目技术提升更方便
3,提高可扩展性,可以增加多个服务器,不用再只提高一个服务器的硬件
4,每个服务器部署的项目小,反应速度加快,提高可用性
5,多个服务器,一个出问题其它服务器可以代替,提高可用性
缺点 :
成本提高,项目开发难度大大提升,运维难度提高。
SpringCloud框架
开发微服务的架构:
- zookeeper + dubbo 比较早的架构,很多需要自己搭建
- SpringCloud 目前比较成熟的框架,功能比较全面,开发更加容易
主要的组件:
-
注册中心,服务的注册和发现机制,Eureka、Nacos、Zookeeper等
-
配置中心,集中管理服务的配置文件,Config、Nacos
-
API网关,实现路由和权限管理,Zuul、Gateway
-
服务通信,实现Restful的服务调用,Openfeign、Dubbo
-
负载均衡,平衡每个服务的负载量,Ribbon
-
熔断器,提高系统的可靠性,Hystrix、Sentinel
-
分布式事务,全局事务管理多个服务,Seata
搭建SpringCloud项目
基于spring boot,存在版本兼容问题,创建时需要锁定springboot版本
接下来使用idea创建一个springcloud项目:
第一步:file-->new-->project,选择下面的版本,点击next.
第二步:选择版本号,设置项目名称
第三步:选择要创建项目需要的框架
最后点击下一步,设置要保存项目的路径就等待创建完成。
效果如图:
因为是微服务,需要把项目部署到多个服务上,就在这个项目下创建多个spring cloud项目。
在此之前,思考一个问题。多个服务之间,怎么来相互调用对方服务器上的资源。
注册中心 Eureka
服务的提供者和服务的消费者都在注册中心上注册(保存IP和端口),服务消费者调用服务提供者时通过注册中心查找对方服务器的IP和端口,进行通信。
现在接着上面的步骤创建三个子项目,选择新建moudle,重复上面创建spring cloud操作。eureka(注册中心),product(商品服务),order(订单客服务)
如下图:
user(用户模块)gataway(API网关) config(配置中心) 这三个服务可以暂时不创建。之后使用到再创建。
首先进行注册中心的配置
第一步,需要将父项目(pom.xml)的依赖继承给子项目,并且导入依赖
如图:将父项目的版本复制到子项目的<parent>下
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
第二步 设置配置文件 配置如下
#服务端口号 server.port=8888 #服务名 spring.application.name=eureka-server #ip地址 eureka.instance.hostname=127.0.0.1 #是否拉取清单 eureka.client.fetch-registry=false #是否注册到服务器上 eureka.client.register-with-eureka=false #配置服务路径 eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
第三步,启动类上添加注解
@EnableEurekaServer
这样,注册中心就配置完成了。
配置商品服务
第一步,需要将父项目(pom.xml)的依赖继承给子项目,并且导入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
第二步,编写配置文件,与注册中心同样的文件下
server.port=8001 spring.application.name=product-service eureka.client.register-with-eureka=true eureka.client.refresh.enable=true eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8888/eureka/
第三步,在启动类上添加注解
@EnableEurekaClient
创建商品实体类(自己定义属性),创建controller层,提供一个获得商品的接口,如图
配置订单服务
根据上面商品服务创建一个订单服务,端口号和服务名称不能重复,唯一不同的是,订单服务需要调用商品服务的接口和信息。
这时需要配置一个RestTemplate的配置类,来实现一个服务调取另一个服务的信息(必须是rest风格)。
controller层
实体类需要加入商品类属性。url是要调用的:服务名/接口。
最后,先启动配置中心 ,再启动商品服务和订单服务。
在浏览器输入ip地址+端口号+接口,即可出现对应的商品信息。
这样,一个基本的分布式项目就搭建成功。