zoukankan      html  css  js  c++  java
  • nacos

    Nacos基本概念概念

    Nacos 是阿里巴巴一个开源项目,服务注册与发现的,统一配置,服务管理的平台!

    官网地址:https://nacos.io/en-us/docs/quick-start.html (学习地方)

    github地址:https://github.com/alibaba/nacos (环境搭建)

    Nacos安装

    直接从github下载即可!

    1、解压到你自己的环境目录

    2、启动服务

     3、启动成功!

     访问:http://localhost:8848/nacos/index.html

     默认的用户名和密码都是 nacos : nacos

    Nacos服务注册

    1、导入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>0.9.0.RELEASE</version>
    </dependency>

    2、编写配置文件

    # Nacos 配置
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    

    3、添加注解

    // @EnableEurekaClient // 只有Eureka可以用
    // 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
    @SpringBootApplication
    @ComponentScan(basePackages = {"com.coding.edu","com.coding.common"})
    @EnableDiscoveryClient
    public class EduApplication {
        public static void main(String[] args) {
            SpringApplication.run(EduApplication.class,args);
        }
    }
    

    4、启动测试,成功注册!

    Feign服务调用

    回顾Feign:

    Feign:声明式、模板化、Http客户端! 作用: 微服务之间调用HTTP api!

    Feign:Ribbon(负载均衡,客户端),Hystrix (服务降级!) 无缝集成这两个!

     

    1、在调用端集成Feign

    <!-- 添加feign支持 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>

    2、启动类增加feign的支持

    @SpringBootApplication
    @ComponentScan(basePackages = {"com.coding.edu","com.coding.common"})
    @EnableDiscoveryClient
    @EnableFeignClients  // feign的支持
    public class EduApplication {
        public static void main(String[] args) {
            SpringApplication.run(EduApplication.class,args);
        }
    }

    3、编写 调用接口

    • 推荐习惯 client 包

    • 在这里编写远程的调用接口

      package com.coding.edu.client;
      
      import com.coding.common.vo.R;
      import org.springframework.cloud.openfeign.FeignClient;
      import org.springframework.stereotype.Component;
      import org.springframework.web.bind.annotation.DeleteMapping;
      import org.springframework.web.bind.annotation.PathVariable;
      
      @FeignClient("coding-vod")
      @Component
      public interface VodClient {
          // 直接调用服务中的请求
          @DeleteMapping("/admin/vod/video/{videoId}")
          public R removeVideo(@PathVariable("videoId") String videoId);
      
      }

    4、完善业务的调用

    package com.coding.edu.service.impl;

    import com.coding.common.constants.ResultCodeEnum;
    import com.coding.common.handler.CodingException;
    import com.coding.edu.client.VodClient;
    import com.coding.edu.entity.Video;
    import com.coding.edu.form.VideoInfoForm;
    import com.coding.edu.mapper.VideoMapper;
    import com.coding.edu.service.VideoService;
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.netflix.client.ClientException;
    import org.springframework.beans.BeanUtils;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringUtils;

    /**
    * <p>
    * 课程视频 服务实现类
    * </p>
    *
    * @author Coding
    * @since 2020-04-05
    */
    @Service
    public class VideoServiceImpl extends ServiceImpl<VideoMapper, Video> implements VideoService {

    // 远程接口
    @Autowired
    private VodClient vodClient;
    // ..
    @Override
    public void removeVideoById(String id) {
    //删除视频资源
    Video video = baseMapper.selectById(id);
    // 获取远端的视频id
    String sourceId = video.getVideoSourceId();
    if (!StringUtils.isEmpty(sourceId)){
    vodClient.removeVideo(sourceId); // 调用vod微服务的方法,删除云端视频
    }

    baseMapper.deleteById(id);
    }
    }

    集成熔断器

    Spring Cloud 调用接口的过程

    Zuul --> Feign --> HyStrix ---> Ribbon ---> HttpClient

    1、导入依赖

    <!-- 添加hystrix支持 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
    <!-- 添加ribbon支持 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        <version>2.2.2.RELEASE</version>
    </dependency>
    

      

    2、配置中开启支持

    # 开启熔断机制
    feign.hystrix.enabled=true

    3、编写降级方法

    package com.coding.edu.client;
    
    import com.coding.common.vo.R;
    import org.springframework.stereotype.Component;
    
    // Hystrix的Fallback处理
    @Component
    public class VodClientHystrixFallback implements VodClient {
        @Override
        public R removeVideo(String videoId) {
            return R.error().message("VodClientHystrixFallback...执行中");
        }
    }
    

    4、失败回调对应的方法

    // fallback 失败调用的类
    @FeignClient(name = "coding-vod",fallback = VodClientHystrixFallback.class)
    @Component
    public interface VodClient {
    
        // 直接调用服务中的请求
        @DeleteMapping("/admin/vod/video/{videoId}")
        public R removeVideo(@PathVariable("videoId") String videoId);
    
    }
    

      

    5、如果程序在预期的结果出现异常,则会调用 hystrix 的 fallback 方法!实现服务降级!

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/418836844qqcom/p/14653548.html
Copyright © 2011-2022 走看看