一、Nacos概念
Nacos 是阿里巴巴在服务发现与配置管理领域开源的新产品,由在其内部生产上久经考验的相关产品如 Diamond,VIPServer 等演化而来。而其中的服务发现功能,在内部支撑着百万级的连接和亿级的 QPS 服务调用。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:
支持服务类型 | Nacos 的关键特性 |
---|---|
Kubernetes Service | 服务发现和服务健康监测 |
gRPC & Dubbo RPC Service | 动态配置服务 |
Spring Cloud RESTful Service | 动态 DNS 服务 |
服务及其元数据管理 |
Nacos1.0
- 构建简单易用的,服务相关的工具集,包括服务发现、配置管理、服务元数据存储、推送、一致性及元数据管理等;
- 与包括Spring Cloud、Kubernetes、Dubbo等开源生态做无缝的融合与支持,同时给这些生态带来很多面向生产时需要的优秀特性。
Nacos2.0
主要关注在统一服务管理、服务共享及服务治理体系的开放的服务平台的建设上,主要包括两个方面:
- Dubbo 4.0 + Nacos 2.0 开放的服务平台
-
Kubernetes + Spring Cloud 统一服务管理
nacosMap.jpg
二、Nacos Spring Cloud 快速开始
下载地址:https://github.com/alibaba/nacos/releases
下载完成之后,解压。根据不同平台,执行不同命令,启动单机版Nacos服务:
Windows | cmd startup.cmd或者双击startup.cmd |
---|---|
Linux/Unix/Mac | sh startup.sh -m standalone |
ubuntu | bash startup.sh -m standalone |
Nacos访问地址:http://localhost:8848/nacos
默认账号:nacos,密码:nacos
三、构建应用接入Nacos注册中心
在完成了Nacos服务的安装和启动之后,下面我们就可以编写两个应用(服务提供者与服务消费者)来验证服务的注册与发现了。
服务提供者
1.maven创建一个Spring Boot应用,命名为:spring-cloud-nacos-provider
2.pom文件
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!--模版引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
3.创建NacosProviderApplication启动类
//通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
@Controller
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class,args);
}
@RequestMapping("/hello")
public String hello(Map<String,Object> map) {
map.put("name", "xiaoqiaobian");
return "hello";
}
}
4.resoures路径创建templates文件夹,添加hello.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello World!</title>
</head>
<body>
Hello World <p th:text="${name}"></p>
</body>
</html>
5.配置文件
5.1创建application.yml配置文件
#在 application.properties 中配置 Nacos server 端口号和地址:
spring:
#thymeleaf:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8000
5.2创建bootstrap.properties配置文件
#配置Nacos server地址,Nacos管理登陆地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#配置Nacos server应用名,在Nacos后台显示
spring.application.name=xiaoqiaobian
6.启动应用程序
image.png
进到nacos管理后台页面-服务管理-服务列表
image.png
服务消费者
1、maven创建一个Spring Boot应用,命名为:spring-cloud-nacos-consumer
2、编辑pom.xml中的依赖内容,与上面服务提供者的一样即可。
3、创建NacosConsumerApplication启动类,自定义@Bean resultTemplate
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class,args);
}
@Bean
//@LoadBalanced
public RestTemplate resultTemplate(){
RestTemplate template = new RestTemplate();
return template;
}
}
4.配置文件一样的,把端口号修改为9000
5.编写Controller类
@RestController
public class App {
@Autowired
RestTemplate restTemplate;
@Autowired
LoadBalancerClient loadBalancerClient;
//消费服务
@RequestMapping("/test")
public String services() {
//通过监听器获取实例对象
ServiceInstance serviceInstance = loadBalancerClient.choose("xiaoqiaobian");
//获取服务提供者的url
String url = serviceInstance.getUri() + "/hello?name=" + "xiaoqiaobian";
//将服务提供者的返回信息进行封装
String result = restTemplate.getForObject(url, String.class);
System.out.println(url);
return result;
}
}
消费服务,访问消费者的静态页面成功
image.png
image.png
image.png
网友评论