欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 【Spring】Spring Cloud Alibaba 版本选择及项目搭建笔记

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

2025/2/5 19:40:09 来源:https://blog.csdn.net/chenghan_yang/article/details/145440384  浏览:    关键词:【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 --permanentfirewall-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);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com