SpringCould | Nacos与Feign


服务注册Nacos

介绍

概念

  • 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • Nacos: Dynamic Naming and Configuration Service
  • Nacos就是注册中心+配置中心的组合 : Nacos = Eureka+Config+Bus

作用

替代Eureka做服务注册中心,替代Config做服务配置中心

Nacos主要提供以下四大功能:

  1. 服务发现和服务健康监测

  2. 动态配置服务

  3. 动态DNS服务

  4. 服务及其元数据管理

下载地址

传送门:github地址

安装启动

  • Linux/Unix/Mac

启动命令(standalone代表着单机模式运行,非集群模式)

启动命令:sh startup.sh -m standalone

  • Windows

启动:进入命令行输入startup.cmd 或者双击startup.cmd运行文件。

客户端访问:http://localhost:8848/nacos

用户名密码:nacos/nacos

进入nacos页面

简单使用

1、引入依赖

父工程pom.xml

<dependencyManagement>
    <dependencies>
        <!--spring cloud alibaba 2.1.0.RELEASE-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <!-- <version>2.1.0.RELEASE</version> -->
              <!-- 统一配置版本 -->
            <version>${cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

业务使用模块pom.xml

 <!--服务注册-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、配置Nacos地址

是在当前注册模块的配置文件中

application.properties

# 服务名
spring.application.name=service-edu
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

.yml

spring:
  application:
    name: service-edu
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

spring.application.name是配置完成后Nacos客户端显示的名称,以及后续调用时引入的服务名称,可以使用短横线,不能使用下划线

3、启动类添加注解

启动类添加注解@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan("com.birdy")
public class EduApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class, args);
    }
}

查看是否注册成功

启动Nacos客户端,如果在服务列表中看到注册的服务表明注册成功,服务列表显示的名称就是在配置文件中spring.application.name配置的名称

进阶

服务调用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、调用端引入依赖

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、在调用端的启动类添加注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@ComponentScan("com.birdy")
public class EduApplication {
    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class, args);
    }
}

3、调用端创建Feign接口

创建client包 ,里面放入与被调用模块对应的接口

@FeignClient("service-vod") //调用的服务名称 spring.application.name
@Component
public interface VodClient {
    /*
    调用的方法路径必须写全,即要带上模块上公共的路径
    @PathVariable注解一定要指定参数名称,否则出错
    */
    @DeleteMapping("/eduvod/video/removeAlyVideo/{id}")
    public Result removeAlyVideo(@PathVariable("id") String id);
}

4、实现类调用

	//控制层
    @ApiOperation(value = "删除小节")
    @DeleteMapping("deleteVideo/{id}")
    public Result deleteVideo(@PathVariable("id") String id){
        int deleteById = videoService.deleteVideoById(id);
        if (deleteById > 0) {
            return Result.ok();
        } else {
            return Result.error();
        }
    }
//实现类,删除小节同时删除对应云端视频
//注入Feign接口vodClient
    @Autowired
    private VodClient vodClient;

    @Override
    public Integer deleteVideoById(String id) {
        //1、根据小节id获取视频id
        EduVideo eduVideo = baseMapper.selectById(id);
        String sourceId = eduVideo.getVideoSourceId();

        //先删除视频,再删除小节,顺序不能颠倒
        if(!StringUtils.isEmpty(sourceId)) {
            //调用feign接口方法
            Result result = vodClient.deleteAlyVideo(sourceId);
            if(result.getCode() == 20001) {
                throw new MyException(20001,"删除视频失败");
            }
        }
        int deleteById = baseMapper.deleteById(id);
        return deleteById;
    }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM