一、微服务
概念
本项目中父工程中的不同模块占用不同的端口号
微服务是一种架构风格/方式
一个项目拆分为多个服务,每个服务独立运行,每个服务占用独立进程,可以将每个服务单独部署在不同的服务器上
优点
程序扩展方便,部署方便,代码量减少,容易定位问题
每个模块可以使用不得存储方式,有的使用redis,有的使用MySQL
每个模块可以使用不同的语言开发
如果系统提供的业务是偏底层的,比如操作系统内核、存储系统、网络系统、数据库系统等,功能之间紧密配合,不适合使用微服务
常用框架
Spring Cloud
Dubbo
Dropwizard
二、Spring Cloud
一系列框架的集合,使用这些框架可以实现微服务
使用要依赖于Springboot
Springboot是快速构建Spring的脚手架,SpringCloud是一系列框架的总称,要使用SpringCloud需要依赖于Springboot才能实现里面的功能
组件
服务发现 Netflix Eureka (Nacos) 注册中心
服务调用 Netflix Feign
熔断器 Netflix Hystrix
服务网关 Spring Cloud GateWay
分布式配置 Spring Cloud Config (Nacos)
消息总线 Spring Cloud Bus (Nacos)
注意和Springboot的版本对应,参考https://start.spring.io/actuator/info ,这里springboot2.4.1对应springcloud2020.0.1
版本后缀
SNAPSHOT 快照版本 随时可能修改
M 里程碑版本 实现了预定的目标
SR 正式版本
GA 稳定版本
三、使用微服务实现删除小节的同时删除视频
1、注册中心
edu模块中删除小节的方法调用vod模块中的删除视频方法
不能直接在edu中引入vod的依赖,这会造成两个模块之间产生关联
在注册中心Nacos中注册要互相调用的两个模块,注册之后就可以实现互相调用
常用注册中心
Eureka
Zookeeper
Consul
Nacos 原生 go开发
Eureka是springcloud中原始的注册中心,但其在2.0遇到性能瓶颈,停止维护,所以现在通常使用阿里巴巴提供的Nacos
2、Nacos
可以作为注册中心 配置中心 消息总线
流程
Nacos作为注册中心,vod作为Provider,edu作为Customer
Provider和Customer在注册中心根据ip,端口号进行注册
CUstomer在注册中心得到Provider的ip,端口号,然后直接访问Provider,调用对应方法,返回结果
安装
https://github.com/alibaba/nacos/release
不要选择beta版本,其用于公测
解压
使用
打开bin目录,双击startup.cmd启动
访问Nacos http://localhost:8848/nacos 用户名和密码都是nacos
服务管理-服务列表显示注册的服务
3、将service_edu注册到Nacos中
在service模块中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在要注册的模块service_edu的application.properties文件中进行配置
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
在要注册的模块service_edu的启动类上加上注解@EnableDiscoveryClient,表示进行注册
4、将service_vod注册到Nacos中
在要注册的模块service_vod的application.properties文件中进行配置
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
在要注册的模块service_vod的启动类上加上注解@EnableDiscoveryClient,表示进行注册
5、测试
启动service_edu和service_vod
访问Nacos,就可以在服务列表中看到service_edu和service_vod了,具体的名称是application.properties中配置的服务名,注意不要加_
问题:启动报错db.num is null
解决:默认的启动里面是配置的集群版的,本机运行的话要改成单机版即可
打开解压后的文件夹/bin/startup.cmd 右键编辑,在set MODE="cluster"前面加上rem注释,然后加上set MODE="standalone" 参考https://www.freesion.com/article/87611162023/
双击shutdown.cmd停止nacos
6、使用Feign组件实现服务调用
Netflix开发的
service中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在调用端service_edu的启动类上加上注解@EnableFeignClients