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