学习大佬的文章,记录自己第一次使用nacos的全过程
- nacos是什么? 官方网站介绍如下
Nacos
/nɑ:kəʊs/是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
简单来讲,就是实现微服务架构中关系管理的服务注册中心,nacos的设计可以有效降低微服务间耦合性,动态的服务发现让微服务配置更简单高效。个人感受,微服务本身也是一种中心化的架构设计。
2.如何使用nacos
单机版nacos注册中心构建
- 官网下载,链接为nacos.io/download/na… 因为是mac OS系统,所以选择下载了最新版本的.zip文件,解压后在/bin 目录下执行指令:
startup.sh -m standalone得到命令行输出如下:
在位置/logs/start.out位置阅读日志输出可以看到
因此通过http://172.30.33.98:8848/nacos/ 进行后台访问,可以看到界面如下:
此时单机版的Nacos注册中心完成搭建。
搭建简易服务
在IDEA 中基于spring-cloud搭建了一个微服务架构项目,其下的两个子项目,分别叫cloud-consumer和cloud-provider。cloud-consumer部分核心在controller 层,向cloud-provider发起HTTP请求。相关代码如下:
@RestController
@RequestMapping("userConsumers")
public class ConsumerController {
private static final Logger logger = Logger.getLogger(ConsumerController.class.getName());
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("info/{id}")
public ResponseEntity<String> getUserInfo(@PathVariable("id") String id) {
System.out.println("ConsumerController.getUserInfo");
// 使用 Nacos 服务发现动态获取服务实例
List<ServiceInstance> instances = discoveryClient.getInstances("cloud-provider");
if (instances != null && !instances.isEmpty()) {
// 获取第一个实例的 IP 和端口
ServiceInstance instance = instances.get(0);
String serviceUrl = "http://" + instance.getHost() + ":" + instance.getPort() + "/user/info/" + id;
logger.info("Request URL: " + serviceUrl);
// 发起请求
return restTemplate.getForEntity(serviceUrl, String.class);
//return restTemplate.getForEntity("http://cloud-provider/user/info/" + id, String.class);
}
return ResponseEntity.notFound().build();
}
}
RestTemplate的配置为:
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced // 解析域名需要使用LoadBalancd注解
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
在当前的spring-boot版本下,该部分子项目需要使用/resource文件夹下bootstrap.yml作为配置文件,内容如下,需要重点关注和nacos相关的配置项。这是服务能在nacos等被成功注册的前置条件。
server:
port: 8081
spring:
application:
name: cloud-consumer # 消费端服务名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务地址
config:
server-addr: 127.0.0.1:8848
namespace: public
group: DEFAULT_GROUP # 配置分组,默认为DEFAULT_GROUP
rest:
discovery:
enabled: true # 开启服务发现
cloud-provider服务只是简单提供一个字符串返回,其他内容和上个项目相似,这里贴一下启动的部分:
package org.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderServiceApplication.class, args);
}
}
运行上述两部分项目后,即可在nacos控制台即可成功查找到注册成功的两项服务:
而对cloud-consume发起http请求后,可以看到成功的返回:
以上就是最基础的nacos使用案例。