服务注册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;
}