Nacos注册中心

【Spring Cloud Alibaba】

1. Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

2.Nacos注册中心

官网:https://nacos.io/zh-cn/

Nacos 致力于发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

在这里插入图片描述

2.1核心概念

1. 服务 (Service)

服务是指一个或一组软件功能(例如特定信息的检索或一组操作的执行),其目的是不同的客户端可以为不同的目的重用(例如通过跨进程的网络调用)。Nacos 支持主流的服务生态,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

2. 服务注册中心 (Service Registry)

服务注册中心,它是服务实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

3. 服务元数据 (Service Metadata)

服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据

4. 服务提供方 (Service Provider)

是指提供可复用和可调用服务的应用方

5. 服务消费方 (Service Consumer)

是指会发起对某个服务调用的应用方

6. 配置 (Configuration)—配置文件中心

在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成这个步骤。配置变更是调整系统运行时的行为的有效手段之一。

7. 配置管理 (Configuration Management)

在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。

8. 名字服务 (Naming Service)

提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务,例如 ServiceName -> Endpoints Info, DNS Domain Name -> IP List, 服务发现和 DNS 就是名字服务的2大场景。

9. 配置服务 (Configuration Service)

在服务或者应用运行过程中,提供动态配置或者元数据以及配置管理的服务提供者。

2.2 nacosServer的安装和启动

NacosServer相当于EurekaServer,只不过eurekaServer使我们自己搭建的一个项目,而NacosServer别人已经提供好了

1. NacosServer的下载

我们要对应版本,目前alibaba稳定版是2021.0.1.0对应的nacos版本为1.4.2

地址: https://github.com/alibaba/nacos/releases/tag/1.4.2

2.目录信息

bin:可执行文件夹目录,包含:启动、停止命令等等

conf:配置文件目录

target:存放naocs-server.jar

LICENSE:授权信息,Nacos使用 Apache License Version 2.0授权

NOTICE:公告信息

3.修改配置文件

进入${Nacos}/conf目录里面,使用文件编辑器打开application.properties文件

spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

Nacos 默认使用嵌入式数据库实现数据的存储,并不方便观察数据存储的基本情况,这里面我们修改为使用Mysql数据库做数据的存储,方便我们观察数据的结构。原本的配置都是注释的,取消注释。

注意:上面的url地址是实际的服务器地址,用户名和密码都是实际的mysql数据库密码

4. Mysql表的导入

在config目录下找到对应的sql脚本-nacos-mysql,创建数据库nacos,运行sql脚本

提示:Nacos 建议使用5.7的Mysql 数据库,版本较低或者较高可能存储兼容性问题。

5.修改启动模式

进入到${Nacos}/bin 目录里面:打开startup.cmd文件,修改启动模式

将set MODE=”cluster”修改为standalone

set mode="standalone" #默认为cluster

6.启动服务器

执行startup.cmd,出现启动画面

http://localhost:8848/nacos ,即可访问启动Nacos 实例,默认用户名密码都是nacos

2.3搭建项目

分别搭建consumer 和provider两个项目,作为提供者和消费者。

1.创建项目

 <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.8</spring-boot.version>
        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
    </properties>
    <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-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2.配置 application.yml

注意提供者端口为8001,则消费者端口设置为8002

server:
    port: 8001
spring:
    application:
        name: consumer
    cloud:
        nacos:  # 客户端注册的地址
            server-addr: localhost:8848
            username: nacos
            password: nacos
#           discovery: # 命名空间 可以做项目隔离
#                namespace: car-namespace
#                group: dev # 在命名空间下的组别,可以用来做细粒度的隔离

3.开启注册发现

@SpringBootApplication
@EnableDiscoveryClient  //开启服务发现客户端 也就是nacosServer的客户端
public class AlibabaNacosConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AlibabaNacosConsumerApplication.class, args);
    }
}

4.提供者添加ProviderController


@RestController
public class ProviderController {
    @GetMapping("hello")
    public String hello(String name) {
        return "hello:"+name;
    }
}

启动查看nacos中的服务列表,是否正常注册。

5.消费者添加ConsumerController

@RestController
public class ConsumerController {
    @Autowired
    private DiscoveryClient discoveryClient;
    @GetMapping("/discovery")
    public String consumer()
    {
       List<ServiceInstance> list= discoveryClient.getInstances("provider");
       ServiceInstance instance=list.get(0);
       String result="服务:"+instance.getInstanceId()+",主机:"+instance.getHost()+",服务URL:" + instance.getUri()+",端口"+instance.getPort();
       return result;
    }
}

至此,服务注册和服务发现已经完成了,基本和eureka一样,注意,只能发现在同一个命名空间下和同一个组别下面才可以发现.

6.集成openfeign做远程调用和负载均衡

修改consumer的内容,添加open-feign组件,注意springcloud的版本

  <properties>       
       <spring-boot.version>2.6.8</spring-boot.version>
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
       <!--open组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- 因为nacos没有集成lb 所以得添加这个依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>      
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

7.修改启动类,添加注解

@EnableFeignClients   //开启feign的客户端

8.添加Hello的Feign接口

@FeignClient(value = "provider")
public interface ProviderFeign {   
    @GetMapping("hello")
    String hello(@RequestParam("name") String name);
}

9.添加多一个提供者项目provider2

测试负载均衡和feign远程调用的结果

2.4 Nacos Discovery对外暴露Endpoint

Nacos Discovery 内部提供了一个 Endpoint, 对应的 endpoint id 为 nacos-discovery。我们通过该Endpoint,能获取到:

当前服务有哪些服务订阅者 ;

当前应用 Nacos 的基础配置信息 ;

1. 给任意项目添加依赖

假设我们想看消费者的一些信息,我们给消费者添加

<dependency>  
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

2 修改配置文件

Endpoint本身对外界隐藏显示,我们需要在配置里面开启对Endponit的显示支持。

修改application.yml配置文件,在里面添加如下的配置:

management:
  endpoints:
    web:
      exposure:
        include: '*'

说明:

exposure.include:对外界保留那些Endpoint,若是所有则使用* ;

3. 启动项目访问查看效果

http://localhost:8001/actuator

http://localhost:8001/actuator/nacosdiscovery

2.5 Nacos Discovery Starter更多的配置项

配置项默认值Key配置说明
服务端地址spring.cloud.nacos.discovery.server-addrNacos Server 启动监听的ip地址和端口
服务名${spring.application.name}spring.cloud.nacos.discovery.service给当前的服务命名
服务分组DEFAULT_GROUPspring.cloud.nacos.discovery.group设置服务所处的分组
权重1spring.cloud.nacos.discovery.weight取值范围 1 到 100,数值越大,权重越大
网卡名spring.cloud.nacos.discovery.network-interface当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址spring.cloud.nacos.discovery.ip优先级最高
注册的端口-1spring.cloud.nacos.discovery.port默认情况下不用配置,会自动探测
命名空间spring.cloud.nacos.discovery.namespace常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKeyspring.cloud.nacos.discovery.access-key当要上阿里云时,阿里云上面的一个云账号名
SecretKeyspring.cloud.nacos.discovery.secret-key当要上阿里云时,阿里云上面的一个云账号密码
Metadataspring.cloud.nacos.discovery.metadata使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名spring.cloud.nacos.discovery.log-name
集群DEFAULTspring.cloud.nacos.discovery.cluster-name配置成Nacos集群名称
接入点UTF-8spring.cloud.nacos.discovery.enpoint地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成Ribbontrueribbon.nacos.enabled一般都设置成true即可
是否开启Nacos Watchtruespring.cloud.nacos.discovery.watch.enabled可以设置成false来关闭 watch

os.discovery.enpoint | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
| 是否集成Ribbon | true | ribbon.nacos.enabled | 一般都设置成true即可 |
| 是否开启Nacos Watch | true | spring.cloud.nacos.discovery.watch.enabled | 可以设置成false来关闭 watch |

.00.

Nacos注册中心,全称为Dynamic Naming and Configuration Service,是一个动态命名和配置服务。它是以服务为核心的注册中心和配置中心。 在分布式项目中,Nacos充当了注册中心的角色。它提供了服务注册和发现的功能,使得不同的服务能够方便地注册到Nacos上,并通过Nacos进行服务的发现。同时,Nacos还提供了配置中心的功能,可以将配置信息集中管理,并实时推送给相关的服务。 相比于其他的注册中心组件,Nacos具有灵活性和易用性。它支持多种注册方式,包括基于HTTP/REST的注册方式、基于DNS的注册方式以及基于RPC的注册方式。此外,Nacos还提供了丰富的API和界面,使得用户能够方便地管理和监控注册的服务和配置信息。 关于Nacos的下载安装和配置,可以通过官方网站进行下载,并按照官方文档的指引进行安装和配置。Nacos的目录结构和外部数据库的配置也可以在官方文档中找到相应的说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Nacos学习之初识Nacos](https://blog.csdn.net/weixin_42601136/article/details/121761177)[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_2"}}] [.reference_item style="max-width: 50%"] - *2* [Nacos注册中心的部署与用法详细介绍](https://blog.csdn.net/a745233700/article/details/122915663)[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_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

huangshaohui00

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

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

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

打赏作者

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

抵扣说明:

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

余额充值