Spring Cloud学习笔记(九) Nacos

Spring Cloud学习笔记(九) Nacos

1. 概念

nacos的官方文档为:https://nacos.io/zh-cn/docs/what-is-nacos.html。总的来说就是实现了服务发现组件和配置服务器,整体结构如下:

Spring Cloud学习笔记(九) Nacos_第1张图片
image

引入nacos后,服务注册与发现的实现调整为:

image

2. 搭建Nacos Server

2.1 下载Nacos

Nacos的下载地址为:https://github.com/alibaba/nacos/releases。找到最新版本的Nacos Server包进行下载。

2.2 启动Nacos Server

下载后进入bin目录,执行:

sh startup.sh -m standalone

startup.sh: line 131: /Users/yubuyun/Documents/workspace/nacos-server/nacos 2/logs/start.out: No such file or directory

找不到或无法加载主类...




org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR1
pom
import



org.springframework.cloud
spring-cloud-alibaba-dependencies
0.9.0.RELEASE
pom
import



org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery

spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
name: blog-center

@Autowired
private DiscoveryClient discoveryClient;

@GetMapping("/test/nacos")
public List testNacos(){
return this.discoveryClient.getInstances("test-center");
}

[
{
"serviceId":"test-center",
"host":"192.168.0.102",
"port":8081,
"secure":false,
"metadata":{
"nacos.instanceId":"192.168.0.102#8081#DEFAULT#DEFAULT_GROUP@@test-center",
"nacos.weight":"1.0",
"nacos.cluster":"DEFAULT",
"nacos.healthy":"true",
"preserved.register.source":"SPRING_CLOUD"
},
"uri":"http://192.168.0.102:8081",
"scheme":null,
"instanceId":null
}
]

@RestController
public class NacosController {

@RequestMapping("/test")
public String test(){
return "hello,world";
}
}

@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}

@GetMapping("/test/nacos")
public void testNacos(){
List serviceInstanceList = this.discoveryClient.getInstances("test-center");

if(!CollectionUtils.isEmpty(serviceInstanceList)){
try {
// 从服务实例列表中取第一个实例的url
String testUrl = serviceInstanceList.
stream().
map(serviceInstance -> {
return serviceInstance.getUri().toString()+"/test";
}).
findFirst().
orElseThrow(()-> new Exception("没有找到实例"));

log.info("url={}",testUrl);
// 访问具体的实例
String result = this.restTemplate.getForObject(testUrl,String.class);
log.info("result={}",result);

} catch (Exception e) {
e.printStackTrace();
}
}
}

url=http://192.168.0.102:8081/test
result=hello,world

  • 作用:提供描述信息,让微服务调用更加灵活。

  • 元数据metadata可以分为服务级别,集群级别和实例级别。

6. 元数据

  • Namespace: 命名空间。如开发环境,测试环境,生产环境可分为三个命名空间。

  • Group: 服务分组,暂时不用。

  • Service: 微服务

  • Cluster: 集群,如设置上海的机房为一个集群,深圳的机房为一个集群。服务间调用时最好优先调用本集群内的实例,以减少网络传输。

  • Instance: 具体的实例。

Spring Cloud学习笔记(九) Nacos_第2张图片
image

使用Nacos的时候涉及到几个概念:

5. 模型

这样说明blog-center成功访问了test-center应用中某一个实例的方法了。

最终访问该方法时打印如下:

然后在blog-center中添加一个访问test-center的方法:

为了让blog-center应用访问test-center应用中某一个具体的实例,首先在test-center应用加一个控制器来处理请求:

4.2 服务间调用实现

这样就可以看出,test-center这个应用是可以被访问的,uri参数指明了具体实例的地址。

这个方法用以获取指定服务名的所有实例信息,返回如下:

然后在blog-center这个服务上添加一个访问test-center服务的方法:

Spring Cloud学习笔记(九) Nacos_第3张图片
image

为此,首先照着第三节再实现一个服务并注册到Nacos Server上,命名为test-center:

4.1 获取应用的所有实例

4. 服务间调用

可以看到应用已经成功注册到Nacos上了。

Spring Cloud学习笔记(九) Nacos_第4张图片
image

配置完后启动应用,然后进入Nacos控制台查看:

在application.yml文件中配置中指定Nacos服务端地址和当前要注册的应用名

3.2 添加配置文件

然后再加上Nacos Client依赖:

以支持Spring Cloud和Spring Cloud Alibaba:

在现成的Spring Boot项目中添加依赖:

3.1 添加依赖

3. 搭建Nocas Client

启动成功后访问:http://localhost:8848/nacos/#/login,就可以进入控制台了。输入控制台和密码都为nacos就可以进入了。

百度后发现这是因为当前下载的包结构中nacos 2这个目录名默认有一个空格导致的,将这个目录名中的空格删除后重新执行命令就可以了。

如果启动还报错,在日志文件里面找到类似报错:

那就新建一个logs目录,并在里面新建一个start.out文件用以保存日志。

启动可能会报错如下:

你可能感兴趣的:(Spring Cloud学习笔记(九) Nacos)