我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring Cloud Alibaba 整合Nacos的详细使用教程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring Cloud Alibaba 整合Nacos的详细使用教程

一、前言

近些年,随着微服务框架在越来越多的公司产品中实践落地,以Spring Cloud Alibaba为导向的一站式微服务解决方案也成为微服务实践和运用的风向标,Spring Cloud Alibaba提供了越来越完善的各类微服务治理组件,比如分布式服务配置与注册中心nacos,服务限流、熔断组件sentinel等,本篇先来介绍nacos的详细使用。

二、常用服务注册中心介绍

为什么需要注册中心呢?简单来说,随着微服务的个数增多,规模增大,再向以往那样,两个微服务之间直接通过拼接完整的请求url调用的话,微服务的维护成本将是巨大的,也不便于后续微服务的API统一治理。

事实上,微服务化的目的就是为了减少服务间的紧密耦合,同时,一定程度上减少服务与服务之间调用时更多的信息暴露,更直接点来说,就是说服务与服务之间的调用应该是去中心化的调用,而注册中心的好处就是为了达到此目的,注册中心提供了一种服务与服务之间互相发现的机制,通过注册中心,微服务提供的各类服务资源可以被统一纳管,进行集中式管理,这就是注册中心的好处。

2.1 dubbo服务注册示意图

下面是dubbo核心的经典的服务注册与调用示意图,其服务治理的核心就是注册中心:Registry的存在。

2.2 常用注册中心对比

下图列举了常用的几种分布式配置中心各个功能的对比,其他更多的配置中心,像eureka,zk,consul等也是可以使用的,具体可结合实际场景进行选择;

从上面的表的数据对比来看,springcloud alibaba为了更好的治理和打造自身的微服务生态体系,最终选择了自研的nacos,nacos即是分布式服务注册中心,同时也可以作为分布式配置中心使用,而且基于界面可视化操作客户端,提供了完善的治理方案。

三、nacos介绍

3.1  什么是nacos

一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。

 官网地址: 官网地址  ;  github地址:nacos git地址

3.2 nacos 特点

nacos的主要特点如下:

  • 服务发现和服务健康监测;
  • 动态配置服务;
  • 动态 DNS 服务;
  • 服务及其元数据管理;

简而言之

nacos 用于管理所有微服务、解决微服务之间调用关系错综复杂、难以维护的问题;

3.3 nacos生态链地图

下图详细介绍了nacos的生态,优势,业务,架构等多维度的全景图,由此可见,作为springcloud-alibaba微服务生态体系下的一款组件,其位置是非常重要的。

四、nacos部署

nacos在单机环境下安装部署非常简单,只需要下载好安装包之后,执行bin目录下的启动脚本即可快速启动服务,下面是完整的流程。

4.1 下载安装包

安装包下载地址:各版本下载地址

也可以根据自身的需要选择合适的版本下载使用;

 选择完版本后,可以选择linux或者windows环境的安装包下载即可;

 这里选择了zip压缩包

4.2 修改脚本启动模式

nacos启动脚本里面提供了集群模式和单机模式启动两种方式,由于本机搭建使用,选用单机模式即可,修改启动脚本中如下的关键参数;

4.3  启动nacos 服务

修改并保存脚本之后,双击启动服务

启动成功之后,按上图中地址访问nacos的客户端控制台,默认登录用户名和密码:nacos/nacos

 登录成功后,看到如下的控制台界面;

五、Spring Cloud Alibaba 整合Nacos

在真正进行代码整合之前,一定要弄清springloud alibaba版本选择的事情,很多同学在这里由于没弄清springloud alibaba与springboot的版本依赖,兼容性导致在整合过程中遇到较多的问题;

5.1  Spring Cloud Alibaba版本选型

下面摘取git中关于各个版本选型的详细对照,git地址:各版本依赖关系地址,最重要的就是springboot的版本与Spring Cloud Alibaba 版本的依赖关系;

5.2  实验整合案例说明

需求说明

1、创建两个微服务,order(订单)微服务,和stock(库存)微服务;

2、将两个微服务注册到nacos,通过nacos实现order服务对stock服务的调用;

5.3  整合完整过程

5.3.1 创建聚合工程,包括两个子模块

5.3.2 根pom引入如下依赖

有更多需要管理的jar,统一在dependencyManagement中加入即可;

<!-- 统一管理jar包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <log4j.version>1.2.17</log4j.version>
    </properties>
 
    <dependencyManagement>
        <dependencies>
 
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
 
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
 
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
 
        </dependencies>
    </dependencyManagement>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

5.3.3 子模块导入如下依赖

这里暂时只需要导入springboot-web以及nacos的客户端即可;

<dependencies>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <!--nacos-config 配置中心-自带动态刷新-->
        <!--<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>-->
 
        <!--nacos-discovery 注册中心-服务发现与注册-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
 
    </dependencies>

5.3.4 工程配置文件

stock模块配置文件

server:
  port: 8085
 
spring:
  application:
    name: stock-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      #config:
        #server-addr: localhost:8848 #配置中心地址

order模块配置文件

server:
  port: 8083
 
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      #config:
        #server-addr: localhost:8848 #配置中心地址
 
service-url:
  nacos-user-service: http://stock-service

5.3.5 stock模块提供一个扣减库存接口

在stock模块中添加一个扣减库存的接口,给下单接口使用

@RestController
@RequestMapping("/stock")
public class StockController {
 
    @GetMapping("/reduct")
    public String reduct(){
        System.out.println("扣减库存");
        return "扣减库存";
    }
 
}

5.3.6 order模块提供一个下单接口

@RestController
@RequestMapping("/order")
public class OrderController {
 
    @Autowired
    RestTemplate restTemplate;
 
    @Value("${service-url.nacos-user-service}")
    private String serverURL;
 
    //localhost:8083/order/add
    @GetMapping("/add")
    public String add(){
        System.out.println("下单成功");
        //String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class);
        String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class);
        System.out.println(forObject);
        return "add order :" + forObject;
    }
 
}

5.3.7 工程启动类

两个模块的启动类上面都加上@EnableDiscoveryClient 注解

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApp {
    public static void main(String[] args) {
        SpringApplication.run(OrderApp.class,args);
    }
 
}

5.3.8 order模块添加配置类

由于spring-cloud-starter-alibaba-nacos-discovery默认集成的是Ribbon,我们知道Ribbon是基于客户端的负载均衡实现,所以这里的LoadBalancerClient的实现类是RibbonLoadBalancerClient,由Ribbon实现对RestTemplate的负载均衡,在当前的两个工程模块中,order作为客户端,所以需要在order模块中添加一个RestTemplate的配置类,并使用LoadBalanced注解进行修饰;

@Configuration
public class RestConfig {
 
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
 
}

5.4  模拟测试

5.4.1 启动服务

启动nacos,然后依次启动stock服务,order服务,在工程启动的时候,注意下面的关键信息,说明服务注册到了nacos;

启动完成之后,再次检查nacos的服务列表,可以发现上面正是两个工程的服务名;

5.4.2 接口模拟调用

浏览器调用order模块的下单接口:localhost:8083/order/add,看到如下效果,说明通过nacos实现对微服务的调用就成功了

 六、写在最后

在微服务架构的设计中,springcloud-alibaba作为一站式解决方案提供者,其每一个组件设计的背后都有着不错的思考和值得学习探究的地方,拿nacos来说,作为后起之秀,却能同时兼具注册中心和配置中心两用,有兴趣的同学可以撸一下源码,可能会有更多的收获。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring Cloud Alibaba 整合Nacos的详细使用教程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring Cloud Alibaba 整合Nacos的详细使用教程

Spring Cloud Alibaba提供了越来越完善的各类微服务治理组件,比如分布式服务配置与注册中心nacos,服务限流、熔断组件sentinel等,本篇先来介绍nacos的详细使用,需要的朋友可以参考下
2023-03-13

Spring Cloud Alibaba整合Nacos使用的方法是什么

今天小编给大家分享一下Spring Cloud Alibaba整合Nacos使用的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起
2023-07-05

springcloud alibaba nacos linux配置的详细教程

首先从github上下载nacos的压缩包:https://github.com/alibaba/nacos/releases下载完成之后,通过WinSCP把文件传到linux服务器上 接着通过tar -zxvf命令将此压缩包解压解压完成之
2022-06-03

Spring Cloud 整合 nacos实现动态配置中心的详细步骤

这篇文章主要介绍了Spring Cloud 整合 nacos 实现动态配置中心,整合步骤是通过添加依赖新建nacos配置,本文分步骤通过实例代码给大家详细讲解,需要的朋友可以参考下
2022-11-13

Spring+SpringMVC+MyBatis整合详细教程(SSM)

使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重
2023-05-31

基于SpringBoot整合SSMP的详细教程

这篇文章主要介绍了SpringBoot整合SSMP的详细教程,通过本文学习基于SpringBoot实现SSMP整合的详细代码,需要的朋友可以参考下
2022-11-13

vue3中使用swiper的完整版教程(超详细!)

工作中日常笔记,vue中使用swiper插件,在pc端和h5端也是常用的插件,下面这篇文章主要给大家介绍了关于vue3中使用swiper的完整版教程,需要的朋友可以参考下
2023-05-15

详解redis与spring的整合(使用缓存)

1、实现目标通过redis缓存数据。(目的不是加快查询的速度,而是减少数据库的负担)  2、所需jar包注意:jdies和commons-pool两个jar的版本是有对应关系的,注意引入jar包是要配对使用,否则将会报错。因为commons
2023-05-31

Spring Cloud Gateway 服务网关的部署与使用详细讲解

这篇文章主要介绍了Spring Cloud Gateway 服务网关的部署与使用详细介绍,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录