【springboot】微服务,实现模块之间的调用
springboot就是spring,是快速配置spring的脚手架,springcloud是很多框架的集合,要使用里面的框架依赖于springboot。@FeignClient(“service-vod”)指定模块其中service-vod为模块名称,但不能有_/vodService/vod/video/deleteByVoId/{videoId}路径不能错。地址:http://localhos
微服务
(1)是一种架构风格。
(2)把一个项目分为多个服务,多个服务独立运行,每个服务占用独立进程。
springcloud
- springcloud并不是一种技术,而是许多技术的总称,很多框架的集合。
- springcloud里面有很多框架,使用这些框架实现微服务操作
- 使用springcloud,需要依赖springboot。
springboot和springcloud关系
springboot就是spring,是快速配置spring的脚手架,springcloud是很多框架的集合,要使用里面的框架依赖于springboot
springboot和springcloud版本要严格对应,我使用的是2.4.3+2020.0.5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
springcloud官网:https://spring.io/projects/spring-cloud#learn
点击Reference Doc就可以找到对应的版本
CURRENT: 当前版本
GA:General Availability,正式版本,官方推荐使用此版本,在国外都是用GA来说明release版本;
M:又叫里程碑版本,表示该版本较之前版本有功能上的重大更新;
PRE(不建议使用):预览版,内部测试版,主要是给开发人员和测试人员测试和找BUG用的;
SNAPSHOT:快照版,可以稳定使用,且仍在继续改进版本
这张图是其他博主总结的
注册中心
将模块在注册中心中注册,实现微服务模块之间的互相调用
Nacos
- 下载地址:https://github.com/alibaba/nacos/releases 2.1.0
- 启动Nacos,单机启动,在bin目录下输入startup.cmd -m standalone
在service父模块中引入依赖,加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效。
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- 在要注册模块的配置文件中进行配置
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
- 在客户端微服务启动类中加入注解
@EnableDiscoveryClient
-
访问nacos:
地址:http://localhost:8848/nacos
用户名密码:nacos/nacos
使用Feign来实现模块调用
- 是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
- 在service中引入依赖
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 在消费者(调用方)中的启动类中加入注解
@EnableFeignClients
- 编写一个接口用于跨模块远程调用方法,接口
@Component
@FeignClient("service-vod")
public interface VodClient {
@DeleteMapping("/vodService/vod/video/deleteByVoId/{videoId}")
R deleteByVoId(@PathVariable("videoId") String videoId);
}
@PathVariable(“videoId”) 必须绑定videoId
@FeignClient(“service-vod”) 指定模块其中service-vod为模块名称,但不能有_
/vodService/vod/video/deleteByVoId/{videoId} 路径不能错
- 最后在删除小节中调用该接口
//删除小节
@DeleteMapping("deleteVideo/{id}")
public R deleteVideo(@PathVariable String id){
EduVideo eduVideo = videoService.getById(id);
String videoSourceId = eduVideo.getVideoSourceId();
if (!videoSourceId.isEmpty()){
vodClient.deleteByVoId(videoSourceId);
}
boolean remove = videoService.removeById(id);
if (remove){
return R.ok();
}else {
return R.error();
}
}
一定要注意依赖问题
更多推荐
所有评论(0)