springCloud/Alibaba常用中间件之Nacos服务注册与发现

文章目录

  • [SpringCloud Alibaba:](#SpringCloud Alibaba:)
  • 依赖版本补充
  • 六、Nacos:服务注册与发现
    • 1、下载安装Nacos
    • 2、服务注册
      • [1. 导入依赖(这里以服务提供者为例)](#1. 导入依赖(这里以服务提供者为例))
      • [2. 修改配置文件和主启动类](#2. 修改配置文件和主启动类)
      • [3. 创建业务类](#3. 创建业务类)
      • [4. 测试](#4. 测试)
    • 3.服务映射
      • [1. 导入依赖](#1. 导入依赖)
      • [2. 修改配置文件和主启动类](#2. 修改配置文件和主启动类)
      • [3. 创建业务类和RestTemplate配置类用来提供负载均衡](#3. 创建业务类和RestTemplate配置类用来提供负载均衡)
      • [4. 测试(使用idea中自带的虚拟端口映射)](#4. 测试(使用idea中自带的虚拟端口映射))
    • [4. 配置中心](#4. 配置中心)
      • [1. 导入配置](#1. 导入配置)
      • [2. nacos创建命名空间](#2. nacos创建命名空间)
      • [3. 修改配置文件--主启动类](#3. 修改配置文件--主启动类)
      • [4. 创建业务类](#4. 创建业务类)

SpringCloud Alibaba:

官方学习文档(中文): https://spring-cloud-alibaba-group.github.io/github-pages/2022/zh-cn/2022.0.0.0-RC2.html

微服务的中间件介绍与使用

微服务架构体系图:

依赖版本补充

下面所有代码中的依赖版本如下:

xml 复制代码
<properties>
   <maven.compiler.source>17</maven.compiler.source>
   <maven.compiler.target>17</maven.compiler.target>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <hutool.version>5.8.22</hutool.version>
   <lombok.version>1.18.26</lombok.version>
   <druid.version>1.1.20</druid.version>
   <mybatis.springboot.version>3.0.2</mybatis.springboot.version>
   <mysql.version>8.0.11</mysql.version>
   <swagger3.version>2.2.0</swagger3.version>
   <mapper.version>4.2.3</mapper.version>
   <fastjson2.version>2.0.40</fastjson2.version>
   <persistence-api.version>1.0.2</persistence-api.version>
   <spring.boot.test.version>3.1.5</spring.boot.test.version>
   <spring.boot.version>3.2.0</spring.boot.version>
   <spring.cloud.version>2023.0.0</spring.cloud.version>
   <spring.cloud.alibaba.version>2023.0.0.0-RC1</spring.cloud.alibaba.version>
   <knife4j-openapi3.version>4.4.0</knife4j-openapi3.version>
</properties>

六、Nacos:服务注册与发现

1、下载安装Nacos

下载地址:https://nacos.io/download/nacos-server


下载完之后解压到没有中文的目录录下,并到bin目录下运行cmd启动命令 startup.cmd -m standalone

(standalone代表着单机模式运行,非集群模式)

默认访问地址为:http://localhost:8848/nacos/ (要是有账号密码默认都是nacos)

2、服务注册

1. 导入依赖(这里以服务提供者为例)

xml 复制代码
<dependencies>
    <!--nacos-discovery-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- 引入自己定义的api通用包 -->
    <dependency>
        <groupId>com.atguigu.cloud</groupId>
        <artifactId>cloud-api-commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--SpringBoot通用依赖模块-->
    <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>
    <!--hutool-->
    <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
    </dependency>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.28</version>
        <scope>provided</scope>
    </dependency>
    <!--test-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2. 修改配置文件和主启动类

yaml 复制代码
server:
  port: 9001
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
java 复制代码
@SpringBootApplication
@EnableDiscoveryClient/*服务注册*/
public class Main9001 {
    public static void main(String[] args) {
        SpringApplication.run(Main9001.class, args);
    }
}

3. 创建业务类

java 复制代码
@RestController
public class PayAlibabaController {
    @Value("${server.port}")/*动态获取端口*/
    private String serverPort;

    @GetMapping(value = "/pay/nacos/{id}")
    public String getPayInfo(@PathVariable("id") Integer id) {
        return "nacos registry, serverPort: " + serverPort + "\t id" + id;
    }
}

4. 测试

3.服务映射

为了演示这里需要在创建一个消费者去映射

1. 导入依赖

注意:消费者与服务提供者所需要导入的依赖不同多了一个负载均衡依赖

xml 复制代码
<dependencies>
    <!--nacos-discovery-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--loadbalancer负载均衡-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    <!--web + actuator-->
    <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>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

2. 修改配置文件和主启动类

yaml 复制代码
server:
  port: 90
spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
#消费者将要去访问的微服务名称(nacos微服务提供者叫什么你写什么)
service-url:
  nacos-user-service: http://nacos-payment-provider

主启动类和上面一样

3. 创建业务类和RestTemplate配置类用来提供负载均衡

这里不懂得可以看一下前面的文章《springCloud/Alibaba常用中间件(Consul、LoadBalancer、Openfeign、circuitBreaker)》中的负载均衡

java 复制代码
@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced //赋予RestTemplate负载均衡的能力
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
java 复制代码
@RestController
public class OrderNacosController {
    @Resource
    private RestTemplate restTemplate;

    /*方式一:在配置文件中配置好要访问的服务。注意:!!!这里是和你配置文件中的service-url下面所配置的名字一样!!!*/
    @Value("${service-url.nacos-user-service}")
    private String service;
    /*方式二:直接写入要访问的服务url*/
    public static final String service_url = "http://nacos-payment-provider/pay";

    @GetMapping("/consumer/pay/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id) {
        String result = restTemplate.getForObject(service + "/nacos/" + id, String.class);
        return result + "\t" + "    我是OrderNacosController83调用者。。。。。。";
    }
}

4. 测试(使用idea中自带的虚拟端口映射)

测试用消费者 的接口是否可以访问成功

这里为了测试负载均衡可以在写一个服务,也可以直接使用idea中自带的虚拟端口映射 配置如下
这时就会出现一个服务,启动即可

这里就可以进行负载均衡的测试了

4. 配置中心

1. 导入配置

注意这里需要导入bootstrap(系统级配置)

依赖为下面的修改bootstrap配置做准备

(这里不太懂的话前面的文章《springCloud/Alibaba常用中间件(Consul、LoadBalancer、Openfeign、circuitBreaker)》中的Consul的服务配置与刷新

xml 复制代码
<dependencies>
    <!--bootstrap-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</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>
    <!--web + actuator-->
    <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>
    <!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

2. nacos创建命名空间


3. 修改配置文件--主启动类

yaml 复制代码
# nacos配置(bootstrap.yml)
spring:
  application:
    name: nacos-config-client-chyb
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
        namespace: chyb #关键点:添加命名空间ID,与config保持一致,若是这里不加服务可能会在public(默认)中运行
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: CHYB_TESTGROUP #指定配置组
        namespace: chyb #指定命名空间(填写的是命名空间ID)
# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml
yaml 复制代码
# application.yml
server:
  port: 3377
spring:
  profiles:
    active: dev # 表示开发环境
    #active: prod # 表示生产环境
    #active: test # 表示测试环境

主启动类:和上面一样这里就不演示了

4. 创建业务类

java 复制代码
@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class NacosConfigClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
  1. 测试

    这里可以修改一下nacos中的配置内容测试是否会动态改变

上述大部分代码以上传到gitee:https://gitee.com/banhuayue/springCloud-Alibaba-code.git

笔记参考来自尚硅谷

相关推荐
何中应9 分钟前
@Autowrited和@Resource注解的区别及使用场景
java·开发语言·spring boot·后端·spring
这就是佬们吗15 分钟前
Windows 的 CMD 网络环境:解决终端无法联网与更新的终极指南
java·windows·git·python·spring·maven
yuanmenghao18 分钟前
自动驾驶中间件iceoryx - 同步与通知机制(一)
开发语言·网络·驱动开发·中间件·自动驾驶
heartbeat..7 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
Jing_jing_X7 小时前
AI分析不同阶层思维 二:Spring 的事务在什么情况下会失效?
java·spring·架构·提升·薪资
myzshare11 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
程序猿零零漆11 小时前
Spring之旅 - 记录学习 Spring 框架的过程和经验(十一)基于XML方式、注解的声明式事务控制、Spring整合Web环境
xml·学习·spring
短剑重铸之日14 小时前
《SpringBoot4.0初识》第五篇:实战代码
java·后端·spring·springboot4.0
heartbeat..14 小时前
Spring MVC 全面详解(Java 主流 Web 开发框架)
java·网络·spring·mvc·web
CUIYD_198914 小时前
Freemarker 无法转译 & 字符
java·开发语言·spring