Nacos和Feign的简单使用
nacosSpring Cloud相关基础服务组件服务发现——Netflix Eureka(Nacos)服务调用——Netflix Feign熔断器——Netflix Hystrix服务网关——Spring CloudGateWay分布式配置——Spring Cloud Config(Nacos)消息总线 —— Spring Cloud Bus (Nacos)基本概念(1)Nacos 是阿里巴巴推
nacos
Spring Cloud相关基础服务组件
服务发现——Netflix Eureka (Nacos)
服务调用——Netflix Feign
熔断器——Netflix Hystrix
服务网关——Spring Cloud GateWay
分布式配置——Spring Cloud Config (Nacos)
消息总线 —— Spring Cloud Bus (Nacos)
基本概念
(1)Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
(2)常见的注册中心:
- Eureka(原生,2.0遇到性能瓶颈,停止维护)
- Zookeeper(支持,专业的独立产品。例如:dubbo)
- Consul(原生,GO语言开发)
- Nacos相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka + Spring Cloud Config Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
(3)Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:
5. 服务发现和服务健康监测
6. 动态配置服务
7. 动态DNS服务
8. 服务及其元数据管理
Nacos结构图:
Nacos下载和安装
(1)下载地址和版本
下载地址:https://github.com/alibaba/nacos/releases
下载版本:nacos-server-1.1.4.tar.gz或nacos-server-1.1.4.zip,解压任意目录即可
(2)启动nacos服务
- Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式)
启动命令:sh startup.sh -m standalone
- Windows
启动命令:cmd startup.cmd
或者双击startup.cmd运行文件。
访问:http://localhost:8848/nacos
用户名密码:nacos/nacos
服务注册
实例场景
如图片所示,项目中有两个服务service_edu和service_vodd。service_vodd主要的功能是删除阿里云的视频服务。service_edu里主要是删除课程的章节和小节,一个课程有多个章节,一个章节里有多个小节,每个小节对应着视频。现在我们要把小节删除,把里面对应的视频删除,因为这里是两个服务,因此我们需要用到远程调用,首先我们应该把两个服务在nacos中注册。
1、在service模块配置pom
配置Nacos客户端的pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、添加服务配置信息
配置application.properties,在客户端微服务中添加注册Nacos服务的配置信息
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3、添加Nacos客户端注解
在客户端微服务启动类中添加注解
@EnableDiscoveryClient
4、启动客户端微服务
启动注册中心,启动已注册的微服务,可以在Nacos服务列表中看到被注册的微服务
这里我们已经把服务在nacos中注册完成,接下来就是service_edu调用service_vodd.
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、需求
删除小节时删除对应的视频
2、在service模块添加pom依赖
<!--服务调用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
3、在调用端的启动类添加注解
@EnableFeignClients
4、创建包和接口
创建client包
@FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解用于对被调用的微服务进行地址映射。
@PathVariable注解一定要指定参数名称,否则出错
@Component注解防止,在其他位置注入CodClient时idea报错
//删除视频远程服务
@FeignClient("service-vodd")
@Component
public interface VodClient {
//定义要调用的方法的路径
@DeleteMapping("/eduvod/video/removeAlyVideo/{id}")
public R removeAlyVideo(@PathVariable("id") String id);
@DeleteMapping("/eduvod/video/delete-batch")
public R removevideoList(@RequestParam("videoIdList") List<String > videoIdList);
}
5、调用微服务
@Service
public class EduVideoServiceImpl extends ServiceImpl<EduVideoMapper, EduVideo> implements EduVideoService {
//注入服务
@Autowired
private VodClient vodClient;
//根据课程id删除小节,一个课程中有很多视频
@Override
public void removeVideoByCourseId(String courseId) {
//根据课程id查询所有视频列表
QueryWrapper<EduVideo> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("course_id",courseId);
queryWrapper.select("video_source_id");
List<EduVideo> videoList = baseMapper.selectList(queryWrapper);
//得到所有视频列表的云端视频id
List<String> videoSourceIdList = new ArrayList<>();
for (int i = 0; i < videoList.size() ; i++) {
EduVideo video = videoList.get(i);
String videoSourceId = video.getVideoSourceId();
if(!StringUtils.isEmpty(videoSourceId)){
videoSourceIdList.add(videoSourceId);
}
}
//调用vod服务删除远程视频
if(videoSourceIdList.size() > 0){
vodClient.removevideoList(videoSourceIdList);
}
//删除video表记录
QueryWrapper<EduVideo> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("course_id", courseId);
Integer count = baseMapper.delete(queryWrapper2);
}
//删除小节时候,同时把里面视频删除
@Override
public void removeVideoById(String id) {
//查询云端视频id
EduVideo video = baseMapper.selectById(id);
String videoSourceId = video.getVideoSourceId();
//删除视频资源
if(!StringUtils.isEmpty(videoSourceId)){
vodClient.removeAlyVideo(videoSourceId);
}
//删除小节
Integer result = baseMapper.deleteById(id);
}
}
这里为止,完成了服务注册和调用的基本使用,下面会整合Hystrix。
更多推荐
所有评论(0)