微服务

(1)是一种架构风格

(2)把一个项目分为多个服务,多个服务独立运行,每个服务占用独立进程。

springcloud
  1. springcloud并不是一种技术,而是许多技术的总称,很多框架的集合。
  2. springcloud里面有很多框架,使用这些框架实现微服务操作
  3. 使用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

请添加图片描述

在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();
    }
}

一定要注意依赖问题

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐