Nacos的介绍和使用

1.什么是Nacos

Nacos是一个服务发现组件也是一个配置服务器,用于解决服务器之前相互发现的问题以及管理微服务的配置。

2.Nacos架构图

Nacos架构图

3.搭建Nacos

3.1 Nacos下载地址

https://github.com/alibaba/nacos

3.2 Nacos启动

https://nacos.io/zh-cn/docs/quick-start.html

3.2 Nacos本地访问

http://localhost:8848/nacos

4. Nacos 用法介绍前的准备内容

准备两个Spring Boot项目,分别命名为’blog-center’和’author-center’,版本要求是v2.6.x+。

5.将应用’blog-center’注册到Nacos

5.1 加依赖 pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>

5.2 写配置 application.yml

spring: 
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  application:
  # 服务名称尽量用-,不用_和特殊字符
  name: blog-center

5.3 启动项目
IntelliJ IDEA 查看:
在这里插入图片描述
Nacos->服务管理->服务列表 查看:
在这里插入图片描述

6.将应用’author-center’注册到Nacos

6.1 加依赖
同上
6.2 写配置 application.yml

spring: 
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  application:
  # 服务名称尽量用-,不用_和特殊字符
  name: author-center
 server: 
  port:  8081

6.3 启动项目
  注意地址端口号是8081

7.重复启用应用’blog-center’

7.1 编辑器启动

Edit configurations->Modify options->Allow multiple instances->apply->ok

7.2 新增端口

spring: 
  cloud: 
    nacos: 
      discovery: 
        server-addr: localhost:8848
  application:
  # 服务名称尽量用-,不用_和特殊字符
  name: blog-center
server:
  port: 8888

提示:重复启动项目时前一个项目的不要关闭,不然只能发现一个微服务

8.blog-center 引入服务发现

8.1 编写方法

package com.ding.contentcenter;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class BlogCenterController {
    @Autowired
    private DiscoveryClient discoveryClient;
    /*
    * 测试:服务发现,博客内容中心总能找到作者中心
    * @return 作者中心所有实例的地址信息
    * */
    @GetMapping("demo")
    public List<ServiceInstance>getInstances(){
        // 查询指定服务的所有实例信息
        return this.discoveryClient.getInstances("author-center");
    }
}

8.2 请求

http://localhost:8081/demo

8.3 响应结果

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

结果:发现了2个‘author-center’微服务的端口实例。

9.从端口实例中发现微服务的地址和端口

9.1 BlogCenterController.java

package com.ding.contentcenter;

import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@RestController
public class BlogCenterController {
    private final DiscoveryClient discoveryClient;

    /*
    * 测试:从端口实例中发现微服务的地址和端口
    * @return String
    * */
    @GetMapping("demo1")
    public String getUrl(){
        List<ServiceInstance> instances = discoveryClient.getInstances("author-center");
        String targetURL = instances.stream()
                .map(instance -> instance.getUri().toString())
                .findFirst()
                .orElseThrow(()->new IllegalArgumentException("当前没有实例"));
        return targetURL;
    }
}

9.2 请求地址

http://localhost:8081/demo1

9.3 响应结果
http://192.168.31.156:8888

10.服务发现的领域模型

10.1领域模型图
在这里插入图片描述

10.2 模型说明

1.Namesapce(命名空间),实现隔离,默认public。
2. Group(分组),不同服务可以分到一个组,默认DEFUALT_GROUP。
3.Service(微服务)
4.Cluster(集群),是对指定一个微服务的虚拟划分,默认DEFAULT,可用于容灾,微服务A同时部署到苏州和上海的机房,苏州的博客中心和作者中心尽量相互调用,用于提高性能
5.Instance(微服务实例)

10.3写配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        # 指定命名空间
        namespace: ffb836dc-a7d1-4f4b-a804-56bc051ba4ax
        # 指定集群名称
        cluster-name: SUZHOU
11.Nacos元数据

11.1 作用

1.提供实例的描述信息
2.让微服务调用更灵活,例如微服务的版本控制

11.2 写配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
   		metadata:
   		  instance: fortest
   		  version: v1   

参考 :《面向未来微服务:Spring Cloud Alibaba》

完毕,内容较多,如有不清楚的地方欢迎留言、多多交流!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Nacos可以作为配置中心使用,它是一种主流的配置中心解决方案之一。作为配置中心,Nacos可以用于管理和动态更新应用程序的配置信息。为什么需要使用配置中心呢?因为在微服务架构中,应用程序的配置信息可能分散在不同的地方,如果需要修改配置,就需要修改多个地方的配置文件,非常不便捷。而使用配置中心可以集中管理和动态更新配置信息,使得配置的修改和更新更加方便。 在使用Nacos作为配置中心时,可以通过Spring Boot来进行整合。通过在应用程序中引入Nacos的相关依赖,配置Nacos的连接信息,就可以通过Nacos来管理应用程序的配置了。 配置的动态刷新是配置中心最核心的功能之一。当需要修改配置时,可以直接在Nacos中修改配置,然后配置中心会自动将修改的配置信息推送给应用程序,使得配置的更新可以实时生效。例如,如果需要修改配置项user.name的值,可以直接在Nacos中修改为"zhangsan",然后配置中心会将新的配置更新到应用程序中,使得应用程序获取到最新的配置信息。这样,就避免了重启应用程序来使配置生效的操作。 因此,使用Nacos作为配置中心可以方便地管理和更新应用程序的配置信息,并且实现配置的动态刷新。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Nacos配置中心用法详细介绍](https://blog.csdn.net/a745233700/article/details/122916208)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_earnest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值