首页 > 其他分享 >SpringCloud微服务(九)

SpringCloud微服务(九)

时间:2024-12-24 15:29:41浏览次数:11  
标签:服务 SpringCloud boot nacos alibaba spring org cloud

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。

 往期目录回顾: 

  1. SpringCloud微服务(一)
  2. SpringCloud微服务(二)
  3. SpringCloud微服务(三)
  4. SpringCloud微服务(四)
  5. SpringCloud微服务(五)
  6. SpringCloud微服务(六)
  7. SpringCloud微服务(七)
  8. SpringCloud微服务(八)

接上期内容:上期我们顺利完成了服务网关组件的学习,至此,微服务项目里所应用的 Spring Cloud 原生组件基本都学习完了。接下来,马上要开启阿里系组件的学习旅程了,话不多说,直接发车!


一、开篇前言

鉴于阿里系组件与官方原生组件之间存在显著差异,为便于后续复习梳理,特创建一个全新项目,该项目将专门用于深入研习阿里系组件知识体系,以便更系统、高效地掌握其特性与应用场景。

新建步骤省略。总体项目结构和依赖如下:

<groupId>com.springcloud</groupId>
    <artifactId>AaLiBaBaSpringCloudStudy</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <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>
        <!--sentinel 版本和alibaba版本不兼容-->
        <!--        <spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>-->
        <micrometer-tracing.version>1.2.0</micrometer-tracing.version>
        <micrometer-observation.version>1.12.0</micrometer-observation.version>
        <feign-micrometer.version>12.5</feign-micrometer.version>
        <zipkin-reporter-brave.version>2.17.0</zipkin-reporter-brave.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--springboot 3.2.0-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springCloud 2023.0.0-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--springCloud alibaba 2023.0.0.0-RC1-->
            <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>
            <!--SpringBoot集成mybatis-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.springboot.version}</version>
            </dependency>
            <!--Mysql数据库驱动8 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!--SpringBoot集成druid连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!--通用Mapper4之tk.mybatis-->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>${mapper.version}</version>
            </dependency>
            <!--persistence-->
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>persistence-api</artifactId>
                <version>${persistence-api.version}</version>
            </dependency>
            <!-- fastjson2 -->
            <dependency>
                <groupId>com.alibaba.fastjson2</groupId>
                <artifactId>fastjson2</artifactId>
                <version>${fastjson2.version}</version>
            </dependency>
            <!-- swagger3 调用方式 http://你的主机IP地址:5555/swagger-ui/index.html -->
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>${swagger3.version}</version>
            </dependency>
            <!--huTool-->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>${hutool.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
            <!-- spring-boot-starter-test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring.boot.test.version}</version>
                <scope>test</scope>
            </dependency>

            <!--micrometer-tracing-bom导入链路追踪版本中心  1-->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-tracing-bom</artifactId>
                <version>${micrometer-tracing.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--micrometer-tracing指标追踪  2-->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-tracing</artifactId>
                <version>${micrometer-tracing.version}</version>
            </dependency>
            <!--micrometer-tracing-bridge-brave适配zipkin的桥接包 3-->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-tracing-bridge-brave</artifactId>
                <version>${micrometer-tracing.version}</version>
            </dependency>
            <!--micrometer-observation 4-->
            <dependency>
                <groupId>io.micrometer</groupId>
                <artifactId>micrometer-observation</artifactId>
                <version>${micrometer-observation.version}</version>
            </dependency>
            <!--feign-micrometer 5-->
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-micrometer</artifactId>
                <version>${feign-micrometer.version}</version>
            </dependency>
            <!--zipkin-reporter-brave 6-->
            <dependency>
                <groupId>io.zipkin.reporter2</groupId>
                <artifactId>zipkin-reporter-brave</artifactId>
                <version>${zipkin-reporter-brave.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

二、Nacos总体介绍

1、Nacos是什么

总结来说就是一句话:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,官方地址:https://nacos.io/。

2、Nacos能干嘛

  1. 替代Eureka/consul做服务注册中心。
  2. 替代(Config+Bus)/Consul 做服务配置中心和满足动态刷新广播通知。

3、Nacos去哪儿下

4、Nacos的安装

下载完成后会得到一个压缩包。

启动命令:startup.cmd -m standalone

访问:http://localhost:8848/nacos,

出现这个页面代表Nacos启动成功。


三、Nacos注册中心实操

1、新建cloud-api-commos模块

拷贝以前的包到新项目中。目录结构如下:

2、新建cloud-consume-order9001模块

1、修改pom.xml文件,(记得刷新maven)

<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>

        <!-- 引入自己定义的api通用包 -->
        <dependency>
            <groupId>com.springcloud</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>

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

2、新增application.yml文件,新增Nacos配置

server:
  port: 9001

spring:
  application:
    name: alibaba-nacos-order-consume
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置naCos地址

3、修改主启动类

4、新增RestTemplateConfig,OrderNaCosController

@Configuration
@LoadBalancerClient(value = "alibaba-nacos-payment-provider",configuration = RestTemplateConfig.class)
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
@RestController
@RequestMapping("/alibaba/consumer")
public class OrderNaCosController {
    private static final String serverURL = "http://alibaba-nacos-payment-provider";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/order/nacos/{id}")
    public ResultResponse<Object> paymentInfo(@PathVariable("id") Integer id) {
        return ResultResponse.success(restTemplate.getForObject(serverURL + "/pay/nacos/" + id, String.class));
    }
}

2、新建cloud-provider-payment9002模块

1、修改pom.xml文件,(记得刷新maven)

<dependencies>

        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- 引入自己定义的api通用包 -->
        <dependency>
            <groupId>com.springcloud</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>

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

2、新增application.yml文件,新增Nacos配置

server:
  port: 9002

spring:
  application:
    name: alibaba-nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置naCos地址

3、修改主启动类

4、新增PayAlibabaController

@RestController
@RequestMapping("/pay")
public class PayAlibabaController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/nacos/{id}")
    public ResultResponse<String> getPayInfo(@PathVariable("id") Integer id) {
        return ResultResponse.success("nacos 支付服务模块, serverPort: " + serverPort + " 请求id:" + id);
    }
}

3、测试功能

启动9001、9002服务,观察Nacos控制台

访问http://localhost:9001/alibaba/consumer/order/nacos/1


四、Nacos服务配置实操

1、新建cloud-nacos-config-client3377模块

步骤省略。


2、修改pom.xml文件,(记得刷新maven

导入相关依赖。

    <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>

        <!--引入自己通用的api-->
        <dependency>
            <groupId>com.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </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>

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

3、新增application.yml和bootstrap.yml文件

server:
  port: 3377

spring:
  profiles:
    active: dev # 表示开发环境
#      active: prod # 表示生产环境
#    active: test # 表示测试环境
# nacos配置
spring:
  application:
    name: alibaba-nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848
        file-extension: yaml

4、修改主启动类


5、新增NaCosConfigClientController文件

@RestController
@RequestMapping("/alibaba/client")
public class NaCosConfigClientController {

    /**
     * 从nacos 配置中心取值
     */
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public ResultResponse<String> getConfigInfo() {
        return ResultResponse.success(configInfo);
    }
}

6、在Nacos中添加配置信息

Nacos端配置文件DataId的命名规则:

#{spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

7、测试功能

访问http://localhost:3377/alibaba/client/config/info,能正常从nacos获取配置。

8、服务配置动态刷新

使用Spring Cloud 原生注解@RefreshScope实现。


五、总结

通过学习 Nacos,不仅掌握了一款实用的服务发现和配置管理工具,更是对微服务架构下的服务治理有了更深层次的理解。在未来的项目开发中,可以更自信地运用 Nacos 去构建高效、灵活、易于维护的微服务体系,更好地服务于项目实践。


ps:努力到底,让持续学习成为贯穿一生的坚守。学习笔记持续更新中。。。。

标签:服务,SpringCloud,boot,nacos,alibaba,spring,org,cloud
From: https://blog.csdn.net/m0_48860687/article/details/144668598

相关文章

  • Java源码打造全民到家:同城按摩养生服务优化
    利用Java源码打造全民到家同城按摩养生服务,并通过一系列优化措施提升用户体验和服务质量,是一个复杂但极具潜力的项目。以下是对该项目的详细分析:一、项目背景与目标在快节奏的城市生活中,按摩养生服务成为了许多人放松身心的首选。全民到家作为一个同城服务平台,旨在通过整合全......
  • 【C++boost::asio网络编程】有关服务端退出方法的笔记
    有关服务端退出方法的笔记C风格的信号关闭boost::asio中的关闭方式原来服务端的main函数如下intmain(){ try { boost::asio::io_contextioc; Servers(ioc,8888); ioc.run(); } catch(conststd::exception&) { } return0;}  上面弊端在......
  • 【SpringCloud】5.Micromete——分布式链路追踪
    必要性:由客户端发起的请求会形成链路,任何一环出现问题,可能导致失败。我们需要快速的观测、定位和解决问题。概述ZipKinMicromete+ZipKin搭建链路控制案例概述为什么需要分布式链路技术在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来......
  • SpringCloud概述
    目录微服务单机架构集群和分布式架构集群和分布式的概念集群和分布式的区别和联系 微服务架构分布式架构和微服务架构微服务的优缺点优点缺点SpringCloud官方介绍注意SpringCloud版本SpringCloud和SpringBoot的关系SpringCloud实现方案SpringCloudNetflix......
  • ssm毕设推动老年人社区服务程序+论文
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着人口老龄化进程的加快,我国老年人口数量不断增加。就像农工党中央社会法治与联络工作委员会的调查结果显示,我国在养老服务体系建设虽取得成效......
  • 在 Windows 系统中,DISM(Deployment Imaging Service and Management Tool)用于服务和管
    在Windows系统中,DISM(DeploymentImagingServiceandManagementTool)用于服务和管理Windows映像文件,包括安装、配置和修复Windows操作系统。DISM提供了不同的会话模式,其中“多个会话”和“单个会话”是两种常见的操作模式。它们在执行任务时有所不同,下面是它们的对比:......
  • stm32f407 cubemx lwip的简易服务器客户端收发项目
    元器件:野火stm32f407开发板技术:lwiptcp/ip内容:搭建的stm32服务器,可以接受和发送数据到客户端项目实现图片stm32通过串口发送数据客户端接受到数据客户端发送数据stm32收到数据**代码可以在我的主业进行下载**......
  • node.js毕设 点石家装服务平台 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于家装服务平台的研究,现有研究主要以综合性家装服务为主,专门针对像点石家装这样具有特定品牌的家装服务平台的研究较少。在国内外,家装服务行业竞争激......
  • .NET Freamework 创建windows 服务
    使用.NETFreamework创建windows服务今天有需求需要新写一个windows服务,发现资料找不到了。顺着模板一点一点写,需要对照微软的资料。这里自己重新整理一份,由于不需要使用跨平台,所以我还是使用.NETFramework4.8下的windows服务。微软文档地址如下:如何:创建Windows服务-.......
  • 计算机毕业设计—35514 springboot小区物业服务平台(源码免费领)
    摘 要科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用中,应用软件的工作规则和开发步骤,采用springboot框......