nacos

Spring Cloud相关基础服务组件

服务发现——Netflix Eureka (Nacos
服务调用——Netflix Feign
熔断器——Netflix Hystrix
服务网关——Spring Cloud GateWay
分布式配置——Spring Cloud Config (Nacos
消息总线 —— Spring Cloud Bus (Nacos

基本概念

(1)Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
(2)常见的注册中心:

  1. Eureka(原生,2.0遇到性能瓶颈,停止维护)
  2. Zookeeper(支持,专业的独立产品。例如:dubbo)
  3. Consul(原生,GO语言开发)
  4. Nacos相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka + Spring Cloud Config Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

(3)Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:
5. 服务发现和服务健康监测
6. 动态配置服务
7. 动态DNS服务
8. 服务及其元数据管理

Nacos结构图:
在这里插入图片描述

Nacos下载和安装

(1)下载地址和版本
下载地址:https://github.com/alibaba/nacos/releases
下载版本:nacos-server-1.1.4.tar.gz或nacos-server-1.1.4.zip,解压任意目录即可
(2)启动nacos服务

  • Linux/Unix/Mac
    启动命令(standalone代表着单机模式运行,非集群模式)
    启动命令:sh startup.sh -m standalone
  • Windows
    启动命令:cmd startup.cmd 或者双击startup.cmd运行文件。
    访问:http://localhost:8848/nacos
    用户名密码:nacos/nacos
    在这里插入图片描述
    在这里插入图片描述

服务注册

实例场景

在这里插入图片描述
如图片所示,项目中有两个服务service_edu和service_vodd。service_vodd主要的功能是删除阿里云的视频服务。service_edu里主要是删除课程的章节和小节,一个课程有多个章节,一个章节里有多个小节,每个小节对应着视频。现在我们要把小节删除,把里面对应的视频删除,因为这里是两个服务,因此我们需要用到远程调用,首先我们应该把两个服务在nacos中注册。

1、在service模块配置pom

配置Nacos客户端的pom依赖

    <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
2、添加服务配置信息

配置application.properties,在客户端微服务中添加注册Nacos服务的配置信息

# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3、添加Nacos客户端注解

在客户端微服务启动类中添加注解

@EnableDiscoveryClient
4、启动客户端微服务

启动注册中心,启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务
在这里插入图片描述
这里我们已经把服务在nacos中注册完成,接下来就是service_edu调用service_vodd.

Feign

基本概念

  • Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
  • Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
  • Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

实现服务调用

1、需求

删除小节时删除对应的视频

2、在service模块添加pom依赖
<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3、在调用端的启动类添加注解
@EnableFeignClients
4、创建包和接口

创建client包
@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解用于对被调用的微服务进行地址映射。
@PathVariable注解一定要指定参数名称,否则出错
@Component注解防止,在其他位置注入CodClient时idea报错
在这里插入图片描述

//删除视频远程服务
@FeignClient("service-vodd")
@Component
public interface VodClient {
    //定义要调用的方法的路径
    @DeleteMapping("/eduvod/video/removeAlyVideo/{id}")
    public R removeAlyVideo(@PathVariable("id") String id);

    @DeleteMapping("/eduvod/video/delete-batch")
    public R removevideoList(@RequestParam("videoIdList") List<String   > videoIdList);

}

5、调用微服务
@Service
public class EduVideoServiceImpl extends ServiceImpl<EduVideoMapper, EduVideo> implements EduVideoService {
	//注入服务
    @Autowired
    private VodClient vodClient;


    //根据课程id删除小节,一个课程中有很多视频
    @Override
    public void removeVideoByCourseId(String courseId) {
        //根据课程id查询所有视频列表
        QueryWrapper<EduVideo> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("course_id",courseId);
        queryWrapper.select("video_source_id");
        List<EduVideo> videoList = baseMapper.selectList(queryWrapper);

        //得到所有视频列表的云端视频id
        List<String> videoSourceIdList = new ArrayList<>();
        for (int i = 0; i < videoList.size() ; i++) {
            EduVideo video = videoList.get(i);
            String videoSourceId = video.getVideoSourceId();
            if(!StringUtils.isEmpty(videoSourceId)){
                videoSourceIdList.add(videoSourceId);
            }
        }

        //调用vod服务删除远程视频
        if(videoSourceIdList.size() > 0){
            vodClient.removevideoList(videoSourceIdList);
        }

        //删除video表记录
        QueryWrapper<EduVideo> queryWrapper2 = new QueryWrapper<>();
        queryWrapper2.eq("course_id", courseId);
        Integer count = baseMapper.delete(queryWrapper2);
    }
    //删除小节时候,同时把里面视频删除
    @Override
    public void removeVideoById(String id) {

        //查询云端视频id
        EduVideo video = baseMapper.selectById(id);
        String videoSourceId = video.getVideoSourceId();
        //删除视频资源
        if(!StringUtils.isEmpty(videoSourceId)){
            vodClient.removeAlyVideo(videoSourceId);
        }
        //删除小节
        Integer result = baseMapper.deleteById(id);
    }
}

这里为止,完成了服务注册和调用的基本使用,下面会整合Hystrix

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐