首页 > 其他分享 >使用 Nacos 做注册中心

使用 Nacos 做注册中心

时间:2023-05-22 17:36:50浏览次数:44  
标签:中心 spring nacos Nacos 注册 provider com cloud

越来越多的国内公司使用 SpringCloudAlibaba 技术,其产品 Nacos 功能强大,同时具有注册中心和配置中心的功能。前面的博客已经介绍了如何安装部署 Nacos ,本篇博客就使用之前部署好的 Nacos 集群(当然你也可以部署并使用单节点的 Nacos),介绍 Java 程序代码如何使用 Nacos 作为注册中心。

回顾上篇博客,Nacos 集群需要至少 3 个节点,搭建完成后,其实访问任何一个节点都是可以的,为了实现负载均衡,采用 80 端口转发了 http 的请求,采用 1080 端口转发了 grpc 的请求。nginx 所在的服务器防火墙需要开通 80 端口和 1080 端口。需要注意的是防火墙需要开通 grpc 的端口,否则 java 程序连接 nacos 时会报错。

在了解了之前已经部署好的 Nacos 集群之后,下面我们就开始写代码,在博客最后会提供源代码下载。


一、搭建工程

新建一个 SpringCloud 工程,名称为 nacos_discovery ,结构如下图所示:

image

common_pojo 是一个公用模块,主要就是一些实体类。

consumer_app 是消费者,采用 ribbon 客户端负载均衡访问 2 个 provider 提供的接口。

provider_app1 和 provider_app2 是两个提供者,提供接口给消费者进行负载均衡调用,代码基本相同。

其中 consumer_app 、provider_app1 、provider_app2 这 3 个微服务会注册到 nacos 中。

本博客使用的依赖版本如下:(需要注意版本之间的兼容性,否则可能会出问题)

  • SpringBoot 的版本为 2.3.12.RELEASE

  • SpringCloud 版本为 Hoxton.SR10

  • SpringCloud Alibaba 的版本为 2.2.9.RELEASE


二、使用 Nacos 作为注册中心

以 provider_app1 为例,介绍如何使用 Nacos 作为注册中心,主要分 2 步:

1. 在父工程和子工程中引入依赖包

官方的 SpringCloud 没有集成 SpringCloud Alibaba,因此在父工程和子工程中都需要引入额外的 jar 包。

父工程需要引入 SpringCloud Alibaba 的管理依赖来确定版本, pom 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.jobs</groupId>
    <artifactId>nacos_discovery</artifactId>
    <version>v1.0</version>
    <modules>
        <module>consumer_app</module>
        <module>provider_app1</module>
        <module>provider_app2</module>
        <module>common_pojo</module>
    </modules>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- 引入 springCloud 依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR10</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--引入 springCloud alibaba 依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.9.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

子工程 provider_app1 的 pom 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>nacos_discovery</artifactId>
        <groupId>com.jobs</groupId>
        <version>v1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>provider_app1</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入自己项目工程中的 common_pojo 依赖包-->
        <dependency>
            <groupId>com.jobs</groupId>
            <artifactId>common_pojo</artifactId>
            <version>v1.0</version>
        </dependency>
        <!--引入 nacos 客户端依赖包-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2. 在 application.yml 中配置 nacos 的连接信息

子工程 provider_app1 的 application.yml 内容如下:

server:
  port: 9091
spring:
  application:
    name: provider
  cloud:
    nacos:
      # 配置 Nacos 的 ip 和 端口
      server-addr: 192.168.216.129:80
      # 配置登录的 账号 和 密码
      username: nacos
      password: nacos

logging:
  level:
    com.jobs: debug

Ok,这就完成使用 Nacos 作为注册中心的所有操作了,很简单吧。剩下的工作就是把 consumer_app 和 provider_app2 也按照上面的步骤 2 配置一下即可,然后启动所有的微服务,即可在 nacos 中查看已经注册的微服务:

image

从上图中可以发现:微服务 consumer 和 provider 都已经注册到了 nacos 中,其中 provider 注册了 2 个示例,点击 provider 后面的详情菜单可以看到具体的两个实例,如下图所示:

image


三、Nacos 的负载均衡策略

对于 Ribbon 来说,如果没有对负载均衡策略进行配置的话,默认是轮询策略。SpringCloud Alibaba 的 Nacos 的默认负载均衡策略是随机策略。如果需要使用 Nacos 的负载均衡规则,需要进行额外的配置。比如对本篇博客的 customer_app 来说,能够调用的微服务只有一个:provider ,因此在 customer_app 的 application.yml 中,如果想调用 provider 微服务接口采用 nacos 的负载均衡策略时,只需要进行如下配置即可:

server:
  port: 8888
spring:
  application:
    # 微服务的名称
    name: consumer
  cloud:
    nacos:
      # 配置 Nacos 的 ip 和 端口
      server-addr: 192.168.216.129:80
      # 配置登录的 账号 和 密码
      username: nacos
      password: nacos

#针对具体的服务,配置使用 nacos 的负载均衡策略(随机策略)
#当前项目中接口提供者的服务名称是 provider
#如果去掉以下的配置,则默认使用 ribbon 的轮训策略
provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

logging:
  level:
    com.jobs: debug

OK,使用 Nacos 作为注册中心非常简单,已经介绍完毕。由于本篇博客使用的技术,如 SpringCloud 和 Ribbon 等在之前的博客都已经介绍过,因此这里就不再赘述,详细内容可以下载并查看源代码。

本篇博客的源代码下载地址为:https://files.cnblogs.com/files/blogs/699532/nacos_discovery.zip

标签:中心,spring,nacos,Nacos,注册,provider,com,cloud
From: https://www.cnblogs.com/studyjobs/p/17421224.html

相关文章

  • 数据中心的黑科技——到底什么是NPO/CPO?
    大家好,我是小枣君。今天这篇文章,我们来聊聊数据中心的两项最新黑科技—NPO/CPO。故事还是要从头开始讲起。去年,国家发布了“东数西算”战略,吸引了全社会的关注。所谓“东数西算”,其实就是数据中心的任务分工调整。我们将东部沿海地区的部分算力需求,转移到西部地区的数据中心完成。......
  • 踩坑:nacos启动报错提示需要设置JDK环境 ,报错:ERROR: Please set the JAVA_HOME variabl
    换了个Windows11的新电脑,因为个人工作、学习需要,就重新下载了Nacos并解压使用,结果就踩了个坑,使用下面命令启动Nacos服务端时:startup.cmd-mstandalone直接在黑窗口提示:ERROR:PleasesettheJAVA_HOMEvariableinyourenvironment,Weneedjava(x64)!jdk8orlaterisbet......
  • nacos 安装和使用
    Nacos是阿里巴巴开源项目,用于构建微服务应用的服务发现、配置管理和服务管理。在微服务项目中不同模块之间服务调用时,实现服务注册与发现。Nacos使用:Nacos是java开发的,依赖Java环境来运行Nacos的下载https://github.com/alibaba/nacos/releases/download/1.4.3/na......
  • Ribbon默认负载均衡规则替换为NacosRule
    近期博主在参与一个SpringCloud搭建,版本为Hoxton.SR12,服务注册发现组件为Nacos的老项目时,发现项目负载均衡组件Ribbon的负载均衡规则在某些场景下不够完美,比如新版本上线,需要重启服务。因此写了这边文章与大家分享。在微服务架构中,负载均衡是实现高可用性、高性能和可......
  • 世纪互联财报:数据中心行业供过于求,世纪互联股价和估值双双暴跌
    世纪互联与国企合作备受瞩目在2022年第三季度财报发布会上,世纪互联(VNET)提到他们已经与常州高新区(新北区)国有企业集团——常高新集团有限公司下属成员单位常高新金隆控股(集团)签署了投资合作协议,双方拟成立注册资本为20亿元人民币的合资公司(世纪互联拥有该合资公司35%的股权),共同投资......
  • 中金公司:全面注册制监管规则解读(附97页报告原文pdf下载链接)
    今天给大家带来中金公司于2023年2月份最新发布的深度研究报告《全面注册制监管规则解读.pdf》。2023年2月1日,全面实行股票发行注册制改革正式启动。从核准制到全面注册制,A股资本市场迎来重要里程碑。做投资的伙伴重点参考哦!本报告共包含如下六大章节:1、全面注册制改革总体情况介绍;2......
  • 2023新手小白注册谷歌Gmail账号此号码无法用于验证的解决方法,谷歌账号注册详细步骤!
    网友在注册谷歌账号时都会遇到提示”此号码无法用于进行验证“导致注册失败。具体原因是什么?又该如何进行注册?需要解决哪些问题?首先,必须要只知道的是网络很多网友传言中国手机无法申请注册谷歌Gmail邮箱,这完全是子虚乌有的事情。除了Googlevoice虚拟号码以外的任何手机号都能注册......
  • 知识库AI机器人训练接口对接-唯一客服系统文档中心
    如果你的需求仅仅是对接自训练的ChatGPT接口,实现自己的个性化机器人,那么可以看看下面的个性化ChatGPT调用接口前提条件是已经搭建好了知识库服务,该服务默认监听端口8083文件上传训练接口地址POST http://127.0.0.1:8083/{集合名称}/uploadDoc该接口支持上传docx、txt、xlsx、p......
  • 普通人如何参与Web3.0?去中心化抖音TokTok或是一个机会!
    Web3.0时代Web3.0的到来,为普通人带来了前所未有的机遇。这个新时代不再是中心化平台主导一切,而是由去中心化应用和区块链技术驱动的开放生态系统。在这个生态系统中,每个人都有机会参与和受益,而去中心化抖音TOKTOK成为了这一浪潮中的领跑者。TOKTOK是什么TOKTOK是基于区块链的社交媒......
  • 程序中报 未注册类的错误
    未注册类原因是程序中使用了第三方的组成,这里使用的微软office的组件,但没有向系统注册导致出现的框架报的异常。错误信息引用信息应用处理方法找到注册该类的批处理命令,向系统注册相关的信息。批处理命令的内容......