Nacos的基本概念
(1)Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
(2)常见的注册中心:
1.Eureka(原生,2.0遇到性能瓶颈,停止维护)
2.Zookeeper(支持,专业的独立产品。例如:dubbo)
3.Consul(原生,GO语言开发)
4.Nacos
相对于 Spring Cloud Eureka 来说,Nacos 更强大。Nacos = Spring Cloud Eureka + Spring CloudConfig
Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring CloudConfig
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
在微服务架构中
(3)Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现、配置和管理。
Nacos主要提供以下四大功能:
1.服务发现和服务健康监测
2.动态配置服务
3.动态DNS服务
4.服务及其元数据管理
nacos的简单结构图如下
服务的消费者与服务的提供者一起在nacos中注册服务,那么消费者就能远程调用服务提供者的服务并且使用了
2、Nacos下载和安装
下载地址:官方下载链接
这里我使用的是Windows的nacos
下载压缩好之后,进入文件目录的bin文件夹中
可以双击startup.cmd文件直接运行
也可以在文件夹中进入cmd键入startup.cmd -m standalone
命令运行(此命令表示单机运行)
启动之后访问http://localhost:8848/nacos/
用户名与密码都是nacos
3.服务注册
在项目pom文件中添加nacos的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在要注册的微服务模块中添加配置文件语句,配置nacos的服务地址
#nacos服务地址 nacos的默认端口号是8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
重启服务
此时在nacos的管理界面已经可以看见服务已经注册进去了
在主程序启动类上添加@EnableDiscoveryClient
注解将nacos注册
package com.atguigu.eduservice;
import io.swagger.annotations.Api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
/**
* @Author Kk
* @Date 2022/2/14 15:04
* @Description
*/
@SpringBootApplication
@ComponentScan(basePackages = {"com.atguigu"})
@EnableDiscoveryClient //nacos注册
@EnableFeignClients //这个注解是添加在调用端,开启服务调用
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class,args);
}
}
以上是在调用服务者上做的操作,在被调用的服务模块中也要做同样操作
接下来用使用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时自行封装服务调用客户端的开发量。
添加feign需要的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在调用端的主程序启动类上添加@EnableFeignClients
注解
在调用端创建一个interface
package com.atguigu.eduservice.client;
import com.atguigu.commonutils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* <p>
* 映射被调用服务端的方法路径
* </P>
*
* @author Kk
* @since 2022/3/6 15:31
*/
@Component
@FeignClient("service-vod") //此注解里面为被调用服务端在nacos注册的服务名
public interface VodClient {
/*
定义调用的方法路径
根据视频id删除阿里云云端视频
*/
@DeleteMapping("eduvod/video/deleteAliYunVideo/{videoId}")
R deleteAliYunVideo(@PathVariable("videoId") String videoId);
}
接口中的方法为需要远程调用的微服务中的方法,Mapping路径映射需要填上对应方法的全路径
特别注意此处的@PathVariable
注解中记得给值,不然可能会出现错误
在该接口上添加@FeignClient
注解里面的值就是被调用服务端在nacos注册的服务名
接下来直接用这个接口去调用里面的方法就可以实现远程调用微服务了