当前位置: 首页 > article >正文

【Spring】Spring Cloud Alibaba 版本选择及项目搭建笔记

文章目录

    • 前言
    • 1. 版本选择
    • 2. 集成 Nacos
    • 3. 服务间调用
    • 4. 集成 Sentinel
    • 5. 测试
    • 后记

前言

最近重新接触了 Spring Cloud 项目,为此参考多篇官方文档重新搭建一次项目,主要实践:

  • 版本选择,包括 Spring Cloud Alibaba、Spring Cloud、Spring Boot
  • 项目集成 Nacos
  • 项目使用 Nacos + Feign + Loadbalancer 完成服务间调用
  • 项目集成 Sentinel

跟着文档实践后,重点理解:

  • 版本选择
  • 组件间的融合特点

项目Github

1. 版本选择

要了解版本怎么选,必然要搞清楚 Spring Cloud Alibaba、Spring Cloud、Spring Boot 这三者的关系:

  • Spring Boot 官网描述 , 特点是快速建立 Spring 单体应用。
  • Spring Cloud 官网描述 ,特点是帮助单体应用向微服务过度。(定义组件抽象)
  • Spring Cloud Alibaba 官网描述 ,特点是贡献大厂的微服务组件。(定义组件实现)

填空题:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>
        </dependencies>
    </dependencyManagement>

首先,参考 Spring Cloud Alibaba 版本说明,受限于jdk版本,我们选 Spring Cloud Alibaba 2021.0.5,关联的Cloud版本为 2021.0.5.0。然后,参考 Spring Cloud 版本说明,关联的 Boot 版本 2.6.13

    <properties>
        <spring-boot.version>2.6.13</spring-boot.version>
        <spring-cloud.version>2021.0.5</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
    </properties>

2. 集成 Nacos

参考 Nacos 官网

  • 准备中间件的服务端本质就是下载一个 release 包,部署到服务器上,能上控制台。跟后续的 Sentinel 思路一致。这里省略。

实现:

  • 引入starter
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
  • 装配(用的是Spring Cloud的注解,体现出生态融合的特点)
@EnableDiscoveryClient
@SpringBootApplication
public class SoupMilkApplication {

    public static void main(String[] args) {
        SpringApplication.run(SoupMilkApplication.class, args);
    }
}
  • 元数据支持
spring.application.name=nacos-milk-service
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=192.168.1.10:8848
spring.cloud.nacos.discovery.namespace=public

3. 服务间调用

普通的 Feign只是简化外部调用,真正配合nacos注册中心使用的话还需要一个负载均衡的依赖。
实现:

  • 引入starter
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>
  • 装配
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class SoupMilkApplication {

    public static void main(String[] args) {
        SpringApplication.run(SoupMilkApplication.class, args);
    }
}
  • feign 关联 nacos 服务
@FeignClient("nacos-water-service")
public interface WaterClient {

    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);

}

4. 集成 Sentinel

参考 Sentinel官网 ,附上一个控制台启动命令

java -Dserver.port=9090  -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar

踩了一个端口的坑,需要开放以下端口,才能上报资源情况(指定为被Sentinel保护的资源)

firewall-cmd --zone=public --add-port=8719/tcp --permanent

firewall-cmd --reload
  • 引入 starter
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  • 使用
@Service
public class TestService {

    @SentinelResource(value = "hello")
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}
  • 元数据
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=192.168.1.10:9090

5. 测试

  • nacos 控制台(账号密码都为sentinel) http://192.168.1.10:8848/nacos/#/login
  • sentinel 控制台(账号密码都为sentinel)http://192.168.1.10:9090/
  • 测试url http://localhost:8080/echo/sss

调用测试url后,既可以在 sentinel 看到记录。配置限流策略也可以生效。

在这里插入图片描述

后记

Spring Cloud Alibaba 两个组件的接入方式都很相似,也很好理解。其中值得一提的是:

  • 在不改变 Spring Cloud 原生注解的情况下,完成了微服务组件的融合。(nacos注册中心)
@EnableDiscoveryClient
@SpringBootApplication
public class SoupMilkApplication {

    public static void main(String[] args) {
        SpringApplication.run(SoupMilkApplication.class, args);
    }
}
  • 在不改变 Feign 注解的情况下,完成了微服务组件的融合。(nacos微服务调用)
@FeignClient("nacos-water-service")
public interface WaterClient {

    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);

}

http://www.kler.cn/a/533194.html

相关文章:

  • 【技术追踪】DiffMIC:用于医学图像分类的双引导扩散网络(MICCAI-2024)
  • 【数据结构】栈与队列
  • php反序列化
  • 知识管理平台在提升组织智慧与执行力方面的关键作用探讨
  • 【数据分析】案例04:豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)
  • deepseek ollama Chatbox 本地安装
  • 剑指offer 二叉树 持续更新中...
  • FastPlanner论文解读(一)——前端路径搜索
  • 「全网最细 + 实战源码案例」设计模式——模板方法模式
  • JavaScript语言的面向对象编程
  • 代码随想录算法训练营Day36
  • 深入理解 Rust 模块中的路径与公开性:绝对路径、相对路径和 `pub` 的应用
  • mysql 学习8 函数,字符串函数,数值函数,日期函数,流程函数
  • 18.[前端开发]Day18-王者荣耀项目实战(一)
  • Scheme语言的正则表达式
  • 传输层协议——TCP协议
  • LeetCode 0922.按奇偶排序数组 II:O(1)空间复杂度-一次遍历双指针
  • 青少年编程与数学 02-008 Pyhon语言编程基础 19课题、外部模块
  • 【数据采集】基于Selenium采集豆瓣电影Top250的详细数据
  • 【Day29 LeetCode】动态规划DP
  • Rust中变量【引用】与【借用】规则
  • Markdown转换器中间件
  • AI协助探索AI新构型自动化创新的技术实现
  • 【现代深度学习技术】深度学习计算 | 延后初始化自定义层
  • 决策规划概述
  • C# 数组、索引器与集合介绍