文章目录
更多相关内容可查看
注:本篇在基于已安装好window版Nacos的前提下进行
如需安装Nacos,请移步阿里Nacos下载、安装(保姆篇)
源码地址:https://gitee.com/its-a-little-bad/nacos.git
Nacos悉知
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款更易于构建云原生应用的动态服务发现、配置和服务管理平台。
以下是Nacos服务注册、调用、发现的基本原理:
- 服务注册:当一个服务实例启动并向Nacos注册自己的服务信息(如服务名、IP、端口、运行状态等)后,Nacos会将这些信息存储在其内部的注册表中。这样,Nacos就可以跟踪所有注册的服务实例的运行状态。
- 服务发现:当一个服务需要调用另一个服务时,它会向Nacos查询该服务的信息。Nacos会从其注册表中查找并返回相应服务的当前可用实例列表。服务消费者可以根据这些信息选择一个合适的服务实例进行调用。
- 服务调用:服务消费者根据Nacos返回的服务实例信息,直接调用服务提供者的API接口,完成服务的调用。
- 健康检查:Nacos会定期对注册的服务实例进行健康检查,如果发现某个服务实例不可用(如网络故障、服务崩溃等),Nacos会将其从注册表中移除,以确保服务消费者不会获取到不可用的服务实例信息。
通过这种方式,Nacos实现了服务的自动注册、发现和调用,大大简化了微服务架构的复杂性。
Nacos登陆
登陆地址:lcalhost:8848/nacos/ 进去发现是没有任何服务的
Nacos服务注册与发现
Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
以下是Nacos服务注册和发现的基本步骤:
1. 添加Nacos Server依赖
首先,你需要在你的项目中添加Nacos Server的依赖。如果你使用的是Maven,你可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置文件application.yml修改
你需要在你的application.properties或者application.yml文件中配置Nacos Server的地址
服务消费yml
server:
port: 8763
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8719
dashboard: localhost:8080
feign.sentinel.enabled: true
服务生产yml
server:
port: 8762
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
sentinel:
transport:
port: 8719
dashboard: localhost:8080
3. 使用@EnableDiscoveryClient注解:
在你的主类或者配置类上添加@EnableDiscoveryClient注解,这样你的服务就可以注册到Nacos Server了
//服务生产
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
//服务消费
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
5.验证服务注册是否成功
启动2个工程,访问localhost:8848,可以发现nacos-provider和nacos-consumer
服务调用
nacos作为服务注册和发现组件时,在进行服务消费,可以选择RestTemplate和Feign等方式
提供服务
在nacos-provider工程,写一个Controller提供API服务
@RestController
public class ProviderController {
Logger logger= LoggerFactory.getLogger(ProviderController.class);
@GetMapping("/hi")
public String hi(@RequestParam(value = "name",defaultValue = "forezp",required = false)String name){
return "hi "+name;
}
}
消费服务(Feign)
在nacos-consumer的pom文件引入以下的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在NacosConsumerApplication启动文件上加上@EnableFeignClients注解开启FeignClient的功能。
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
写一个FeignClient,调用nacos-provider的服务,代码如下:
@FeignClient("nacos-provider")
public interface ProviderClient {
@GetMapping("/hi")
String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}
写一个消费API,该API使用ProviderClient来调用nacos-provider的API服务,代码如下:
@RestController
public class ConsumerController {
@Autowired
ProviderClient providerClient;
@GetMapping("/hi-feign")
public String hiFeign(){
return providerClient.hi("feign");
}
}
测试
在浏览器上访问http://localhost:8763/hi-feign,出现以下图示时nacos-consumer调用nacos-provider服务成功。