SpringCloud Alibaba Nacos

这篇具有很好参考价值的文章主要介绍了SpringCloud Alibaba Nacos。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringCloud Alibaba Nacos

Nacos 基础

1 官网

1.1 https://github.com/alibaba/Nacos

2 Nacos 是什么?

2.1 一句话: Nacos 就是注册中心[替代Eureka]+配置中心[替代Config]
2.2 Nacos:Dynamic Naming and Configuration Service
2.3 Nacos:架构理论基础: CAP 理论(支持AP 和CP, 可以切换)

3 Nacos 下载&运行

3.1 下载: https://github.com/alibaba/nacos/releases/tag/1.2.1
3.2 环境要求: Java8/Maven 3.2.x+
3.3 解压,运行bin/startup.cmd
3.4 浏览器http://localhost:8848/nacos
3.5 用户名/密码为nacos。

  1. 输入: localhost:8848/nacos

SpringCloud Alibaba Nacos

SpringCloud Alibaba Nacos

创建Nacos 服务提供者

– 示意图

SpringCloud Alibaba Nacos

创建member-service-nacos-provider-10004 并注册到NacosServer8848

  1. 参考member-service-provider-10000 来创建member-service-nacos-provider-10004 即可
  2. 创建好后, 使用member-service-provider-10000 的源码和配置替换member-service-nacos-provider-10004 生成的代码
  3. 提醒,拷贝时不要忘记拷贝resources/mapper/MemberMapper.xml 这些xxx.xml 文件
修改父项目pom.xml
  1. 参考官方文档
    https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

SpringCloud Alibaba Nacos

修改pom.xml, 加入spring-cloud-alibaba 依赖

<!--引入相关的依赖-->
    <dependencies>
       <!--引入nacos-starter nacos的场景启动器starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--引入web-starter 说明我们使用版本仲裁(从父项目继承了版本)
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


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

        <!--引入mybatis-starter 整合到springboot-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!--引入druid-starter-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!--这里需要我们指定版本, 因为父项目没有-->
            <version>1.1.17</version>
        </dependency>

        <!--引入mysql依赖,使用版本仲裁-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--spring-boot-start-jdbc引入-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--引入test-starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--引入公共模块-->
        <dependency>
            <groupId>com.hspedu.springcloud</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
创建application.yml

将member-service-provider-10000 的application.xml 拷贝过来,修改即可

server:
  port: 10004

spring:
  application:
    name: member-service-nacos-provider #配置应用的名称
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 自己的密码
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos Server的地址
#配置暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: '*'
mybatis:
  mapper-locations: classpath:mapper/*.xml #指定mapper.xml文件位置
  type-aliases-package: com.wyxedu.springcloud.entity # 实例类所在的包,这样通过类名就可以引用
创建主启动类
//@EnableDiscoveryClient 引入的是Nacos发现注解
@EnableDiscoveryClient
@SpringBootApplication
public class MemberNacosProviderApplication10004 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosProviderApplication10004.class, args);
        System.out.println();
    }
}

为看到更好提示,修改Controller
说明

1. 我们的前端如果是以json格式来发送添加信息Member, 那么我们需要使用@RequestBody, 才能将数据封装到对应的bean, 同时保证http的请求头的 content-type是对应
2. 如果前端是以表单形式提交了,则不需要使用@RequestBody, 才会进行对象参数封装, 同时保证http的请求头的 content-type是对应

@RestController
@Slf4j
public class MemberController {
    @Resource
    private MemberService memberService;
    @PostMapping(value = "/member/save")
    public Result save(@RequestBody Member member) {//增加
        log.info("会员服务方接收到member= " + member);
        int result = memberService.save(member);
        log.info("reset= " + result);
        if (result > 0) { //成功
            return Result.success(" 添加用户成功 member-service-nacos-provider-10004", result);
        } else {
            return Result.error("401", "添加用户失败");
        }
    }
    //这里使用url占位符+@PathVariable
    @GetMapping(value = "/member/get/{id}")
    public Result getMemberById(@PathVariable("id") Long id) {
        Member member = memberService.queryMemberById(id);
        log.info("查询结果= " + member);
        if (member != null) {
            return Result.success(" 查询成功member-service-nacos-provider-10004",
                    member);
        } else {
            return Result.error("402", "ID= " + id + " 不存在");
        }
    }
}

测试

1 启动Nacos Server 8848
2 启动member-service-nacos-provider-10004
3 观察nacos 服务是否注册成功

SpringCloud Alibaba Nacos

浏览器: http://localhost:10004/member/get/1

SpringCloud Alibaba Nacos

创建member-service-nacos-provider-10006 并注册到NacosServer8848

创建member-service-nacos-provider-10006
  1. 参考member-service-nacos-provider-10004 来创建member-service-nacos-provider-10006 即可
  2. 创建好后, 使用member-service-nacos-provider-10004 的源码和配置替换member-service-nacos-provider-10006 生成的代码
  3. 提醒,拷贝时不要忘记拷贝resources/mapper/MemberMapper.xml 这些xxx.xml 文件
修改本模块pom.xml
   <dependencies>

        <!--引入nacos-starter nacos的场景启动器starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--引入web-starter 说明我们使用版本仲裁(从父项目继承了版本)
        -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


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

        <!--引入mybatis-starter 整合到springboot-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!--引入druid-starter-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <!--这里需要我们指定版本, 因为父项目没有-->
            <version>1.1.17</version>
        </dependency>

        <!--引入mysql依赖,使用版本仲裁-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--spring-boot-start-jdbc引入-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--引入test-starter-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--引入公共模块-->
        <dependency>
            <groupId>com.hspedu.springcloud</groupId>
            <artifactId>e_commerce_center-common-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
创建application.yml
server:
  port: 10006

spring:
  application:
    name: member-service-nacos-provider #配置应用的名称
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 自己的密码
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos Server的地址
#配置暴露所有的监控点
management:
  endpoints:
    web:
      exposure:
        include: '*'
#配置mybatis
mybatis:
  mapper-locations: classpath:mapper/*.xml #指定mapper.xml文件位置
  type-aliases-package: com.hspedu.springcloud.entity # 实例类所在的包,这样通过类名就可以引用
创建主启动类
//@EnableDiscoveryClient 引入的是Nacos发现注解
@EnableDiscoveryClient
@SpringBootApplication
public class MemberNacosProviderApplication10006 {
    public static void main(String[] args) {
        SpringApplication.run(MemberNacosProviderApplication10006.class,args);
    }
}

为看到更好提示,修改Controller

说明

1. 我们的前端如果是以json格式来发送添加信息Member, 那么我们需要使用@RequestBody, 才能将数据封装到对应的bean, 同时保证http的请求头的 content-type是对应
2. 如果前端是以表单形式提交了,则不需要使用@RequestBody, 才会进行对象参数封装, 同时保证http的请求头的 content-type是对应

@RestController
@Slf4j
public class MemberController {
    @Resource
    private MemberService memberService;
    @PostMapping(value = "/member/save")
    public Result save(@RequestBody Member member) {//增加
        log.info("会员服务方接收到member= " + member);
        int result = memberService.save(member);
        log.info("reset= " + result);
        if (result > 0) { //成功
            return Result.success(" 添加用户成功 member-service-nacos-provider-10004", result);
        } else {
            return Result.error("401", "添加用户失败");
        }
    }
    //这里使用url占位符+@PathVariable
    @GetMapping(value = "/member/get/{id}")
    public Result getMemberById(@PathVariable("id") Long id) {
        Member member = memberService.queryMemberById(id);
        log.info("查询结果= " + member);
        if (member != null) {
            return Result.success(" 查询成功member-service-nacos-provider-10004",
                    member);
        } else {
            return Result.error("402", "ID= " + id + " 不存在");
        }
    }
}

测试

1 启动Nacos Server 8848
2 启动member-service-nacos-provider-10006
3 观察nacos 服务是否注册成功

SpringCloud Alibaba Nacos
浏览器: http://localhost:10006/member/get/1

SpringCloud Alibaba Nacos

创建Nacos 的服务消费者

– 示意图

SpringCloud Alibaba Nacos

创建member-service-nacos-consumer-80 并注册到NacosServer8848

  1. 参考member-service-consumer-80 来创建member-service-nacos-consumer-80 即可修改pom.xml

  2. 将member-service-consumer-80 的pom.xml 的… 拷贝过来,修改即可增加这个包

    <!--引入alibaba-nacos 使用版本仲裁-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

创建application.yml

server:
  port: 80

spring:
  application:
    name: member-service-nacos-consumer-80
  #配置nacos
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server的地址

创建主启动类/MemberNacosConsumerApplication80.java

@SpringBootApplication
@EnableDiscoveryClient //引入的是启动 nacos发现注解
@EnableFeignClients
public class MemberNacosConsumerApplication80 {
    public static void main(String[] args) {

        SpringApplication.run(MemberNacosConsumerApplication80.class,args);
    }
}

创建配置类config/CustomizationBean.java

/**

 * CustomizationBean: 配置类
 * 配置注入RestTemplate bean/对象
 */
@Configuration
public class CustomizationBean {

    //说明: 配置注入RestTemplate bean/对象
    //这里的@LoadBalanced 就是赋予 RestTemplate 负载均衡的能力
    //默认是使用轮询算法来访问远程调用接口/地址
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

创建/MemberNacosConsumerController.java

@RestController
@Slf4j
public class MemberNacosConsumerController {

    //说明 http://member-service-nacos-provider 就是服务注册到Nacos server的服务名,注意这里是小写
    public static final String MEMBER_SERVICE_NACOS_PROVIDER_URL =
            "http://member-service-nacos-provider"; //老师分析一下这里?应该这么填写

    //配置RestTemplate
    @Resource
    private RestTemplate restTemplate;

   //方法1/接口. 添加member
    @PostMapping("/member/nacos/consumer/save")
    public Result<Member> save(Member member) {

        return restTemplate.postForObject(MEMBER_SERVICE_NACOS_PROVIDER_URL
                + "/member/save", member, Result.class);
    }

    //方法2/接口, 查询member
    @GetMapping("/member/nacos/consumer/get/{id}")
    public Result<Member> getMemberById(@PathVariable("id") Long id) {

        return restTemplate.getForObject(
                MEMBER_SERVICE_NACOS_PROVIDER_URL + "/member/get/" + id, Result.class);
    }
}

测试

1 启动Nacos Server 8848
2 启动member-service-nacos-provider-10004/10006
3 启动member-service-nacos-consumer-80
4 浏览器: http://localhost/member/nacos/consumer/get/1

SpringCloud Alibaba Nacos

SpringCloud Alibaba Nacos

配置自己的负载均衡算法, 测试完毕恢复成原来的轮询算法

/**
* RibbonRule: 配置类: 配置注入自己的负载均衡算法
*/
@Configuration
public class RibbonRule {

   @Bean
   public IRule myRibbtonRule() {
       //这里返回的是RandomRule, 小伙伴也可以自己指定
       return new RandomRule();
   }
}

Nacos AP 和CP 切换-理论

各种注册中心对比

SpringCloud Alibaba Nacos

选择AP 还是CP?

  1. CP: 服务可以不能用,但必须要保证数据的一致性。

  2. AP: 数据可以短暂不一致,但最终是需要一致的,无论如何都要保证服务的可用。

  3. 取舍:只能在CP 和AP 选择一个平衡点, 大多数都是选择AP 模式

AP 和CP 切换

说明

​ Nacos 集群默认支持的是CAP原则中的AP原则,但是也可切换为CP原则(一般不切换)

CURL切换命令: curl -X PUT
​ ‘$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’

URL指令:
​ $NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

参考: https://www.jianshu.com/p/c56e22c222bb文章来源地址https://www.toymoban.com/news/detail-465755.html

到了这里,关于SpringCloud Alibaba Nacos的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生】SpringCloud Alibaba 之 Nacos注册中心实战

    注册中心, 也称命名服务(Naming servive), 它的核心功能与DNS服务类似, 无非就是通过一个特定的名字来查找相关的实例集合, 但是它们也有很多不同点 Nacos与eureka的共同点 都支持服务注册和服务拉取 都支持服务提供者心跳方式做健康检测 Nacos与Eureka的区别 Nacos支持服务端主动检

    2024年02月03日
    浏览(70)
  • 【SpringCloud Alibaba】Nacos服务管理与Feign负载均衡

    目录 一、微服务搭建 1.1 服务提供者与服务消费者 1.2 依赖关系   二、服务注册与负载均衡使用 2.1 Nacos 实现服务的注册与发现 2.2 Loadbalancer负载均衡、Feign声明式服务调用 2.3 示例综合实现 2.3.1 服务注册与发现测试 2.3.2 负载均衡测试  服务提供者 服务的被调用方(即:为其他微

    2024年02月03日
    浏览(37)
  • 微服务简介,Springcloud-alibaba中的Nacos简介

    目录 一:微服务架构 1.0:单体架构 1.1:微服务架构 1.2:微服务架构的优势 1.3:微服务架构的缺点(挑战) 1.4:SpringCloud与微服务关系 1.5:SpringBoot和SpringCloud关系 二:服务注册与发现 2.1:服务注册与发现 2.2:注册中心对比 nacos功能与架构 三:nacos简介 nacos功能:  nacos安装

    2024年02月10日
    浏览(36)
  • 【SpringCloud Alibaba】Nacos Config配置管理与Gateway 网关

    目录 一、Config 远程配置 1.1 config 介绍 1.2 bootstrap.yml 配置文件 二、Gateway 网关 2.1 gateway 介绍 2.2 gateway 使用 2.2.1 方式一 2.2.2 方式二(动态路由)         微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。

    2024年02月02日
    浏览(41)
  • 【springcloud 微服务】Spring Cloud Alibaba Nacos使用详解

    目录 一、前言 二、nacos介绍 2.1  什么是 Nacos 2.2 nacos 核心能力 2.2.1 服务发现和服务健康监测

    2024年01月22日
    浏览(41)
  • springcloud-alibaba (04)Gateway与Nacos结合使用

    🎉欢迎来到这里,今天我将为大家介绍如何将Spring Cloud Gateway和Nacos结合使用,实现一个高效稳定的服务网关!在微服务架构中,API网关是必不可少的一部分,它提供了路由请求、负载均衡、安全认证和限流等功能。Spring Cloud Gateway是基于Spring Framework、Spring Boot和Project Reacto

    2024年02月15日
    浏览(26)
  • SpringCloud Alibaba Demo(Nacos,OpenFeign,Gatway,Sentinel)

    ma/springcloud-alibaba-demo 参考:https://www.cnblogs.com/zys2019/p/12682628.html SpringBoot、SpringCloud 、SpringCloud Alibaba 以及各种组件存在版本对应关系。可参考下面 版本对应 启动nacos.   ./startup.cmd -m standalone  登陆nacos官方 localhost:8848   nacos/nacos 创建父工程spring-cloud-alibaba pom.xml如下: Naco

    2024年02月06日
    浏览(28)
  • 微服务(SpringBoot、SpringCloud、SpringCloud Alibaba、Nacos、JDK)之间的版本对应依赖关系(附Nacos高速下载地址)

    前言 本文主要整理与介绍在搭建微服务项目时,核心组件之间的版本对应关系,避免版本依赖冲突带来的一系列问题,同时也方便后续升级与查看。 这里先放上我目前搭建的较新的微服务脚手架版本,如下(springboot3.0开始不支持jdk8) Spring Boot Spring Cloud Spring Cloud Alibaba Noc

    2024年02月04日
    浏览(34)
  • SpringCloud Alibaba - Nacos 注册发现、分级模型、配置集群、环境隔离、原理

    目录 一、Nacos 安装和配置 二、Nacos 服务注册发现 2.1、将服务注册到 nacos 中 2.2、执行效果 2.3、Nacos 服务注册发现原理过程(考点:与 Eureka 的区别) 三、Nacos 的服务分级模型及配置 3.1、分级模型 3.2、配置集群 3.3、配置 Nacos 负载均衡策略 3.4、Nacos 服务实例的权重设置 3.5、

    2024年04月16日
    浏览(37)
  • Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳转 Java之SpringCloud Alibaba【二】【微服务调用组件Feign】 跳转 Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】 跳转 Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 跳转 Java之SpringCloud Alibaba【五】【微服务

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包