服務注冊Nacos
介紹
概念
- 一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
- Nacos: Dynamic Naming and Configuration Service
- Nacos就是注冊中心+配置中心的組合 :
Nacos = Eureka+Config+Bus
作用
替代Eureka做服務注冊中心,替代Config做服務配置中心
Nacos主要提供以下四大功能:
-
服務發現和服務健康監測
-
動態配置服務
-
動態DNS服務
-
服務及其元數據管理
下載地址
安裝啟動
- 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;
}