百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

基于Spring Cloud Alibaba + Nacos构建微服务框架

myzbx 2025-04-11 02:20 13 浏览

一、技术选型说明

mermaid

graph TD
    A[Spring Cloud Alibaba 2022.0.0] --> B[Nacos 2.2.3]
    A --> C[Sentinel 1.8.6]
    A --> D[Seata 1.7.0]
    A --> E[RocketMQ 4.9.4]

二、环境准备

1. 版本对应关系

组件

版本

Spring Boot

3.1.4

Spring Cloud

2022.0.4

Spring Cloud Alibaba

2022.0.0.0

Nacos Server

2.2.3

2. Maven父工程配置

xml



    
        
            com.alibaba.cloud
            spring-cloud-alibaba-dependencies
            2022.0.0.0
            pom
            import
        
    




    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-config
    

三、Nacos服务端部署

1. 生产环境推荐架构

mermaid

graph LR
    VIP --> N1[Nacos节点1]
    VIP --> N2[Nacos节点2]
    VIP --> N3[Nacos节点3]
    N1 --> MySQL集群
    N2 --> MySQL集群
    N3 --> MySQL集群

2. Docker-Compose集群部署

yaml

version: '3'
services:
  nacos1:
    image: nacos/nacos-server:v2.2.3
    environment:
      - MODE=cluster
      - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=123456
    networks:
      - nacos_net

  nacos2:
    image: nacos/nacos-server:v2.2.3
    environment: [...]
  
  nacos3:
    image: nacos/nacos-server:v2.2.3
    environment: [...]

四、微服务核心模块搭建

1. 服务注册与发现

服务提供方配置

yaml

spring:
  application:
    name: user-service
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.100:8848,192.168.1.101:8848
        namespace: dev-env
        group: BUSINESS_GROUP
        metadata:
          version: 2.0
          region: hangzhou

服务消费方实现

java

@RestController
public class OrderController {
    
    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/services")
    public List getServices() {
        return discoveryClient.getInstances("user-service");
    }
}

2. 配置中心集成

bootstrap.yml配置

yaml

spring:
  cloud:
    nacos:
      config:
        server-addr: ${NACOS_HOST:localhost}:8848
        file-extension: yaml
        shared-configs:
          - data-id: common-config.yaml
            group: GLOBAL_GROUP
            refresh: true
        extension-configs:
          - data-id: datasource-config.yaml
            group: DATABASE_GROUP
            refresh: false

动态配置刷新

java

@RefreshScope
public class PaymentConfig {
    
    @Value("${payment.timeout:3000}")
    private Integer timeout;
}

五、服务通信方案

1. OpenFeign增强配置

java

@FeignClient(
    name = "inventory-service", 
    configuration = FeignConfig.class,
    fallbackFactory = InventoryFallbackFactory.class
)
public interface InventoryClient {

    @GetMapping("/stock/{skuId}")
    Integer getStock(@PathVariable Long skuId);
}

// 自定义配置类
public class FeignConfig {
    
    @Bean
    public Retryer retryer() {
        return new Retryer.Default(100, 1000, 3);
    }
}

2. RestTemplate负载均衡

java

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    factory.setConnectTimeout(3000);
    factory.setReadTimeout(5000);
    return new RestTemplate(factory);
}

六、服务治理增强

1. 流量权重控制

properties

# 在Nacos控制台设置metadata
preserved.register.weight=80 # 取值范围1-100

2. 服务元数据路由

java

@Bean
public NacosRule nacosRule() {
    NacosRule rule = new NacosRule();
    rule.setMetadataFilterEnabled(true); // 开启元数据过滤
    return rule;
}

七、配置中心高级用法

1. 多环境配置隔离

命名空间规划:
- dev: 开发环境
- test: 测试环境
- prod: 生产环境

数据ID命名规范:
{应用名}-{环境}.{文件格式}
示例:user-service-dev.yaml

2. 敏感配置加密

yaml

# 使用Jasypt加密
spring:
  cloud:
    nacos:
      config:
        password: ENC(AQC4F9O6vXrZ6PwC5J4jDg==)

八、监控与运维

1. 健康检查端点

yaml

management:
  endpoints:
    web:
      exposure:
        include: health,info,nacos-discovery
  endpoint:
    health:
      show-details: always

2. 日志追踪集成

xml



    org.springframework.cloud
    spring-cloud-starter-sleuth


    org.springframework.cloud
    spring-cloud-sleuth-zipkin

九、最佳实践建议

  1. 服务粒度控制:按照业务能力划分服务,单个服务代码量控制在5万行以内
  2. 配置管理规范
  3. 基础配置使用shared-configs
  4. 应用专属配置使用extension-configs
  5. 环境差异配置使用namespace隔离
  6. 版本控制策略
  7. properties
# 在metadata中定义 version=2.1.0 canary.enabled=true
  1. 服务鉴权方案
  2. yaml
spring:
  cloud:
    nacos:
      discovery:
        access-key: AKID
        secret-key: SECRET

十、常见问题排查

问题1:服务注册失败

  • 检查点:
  • Nacos Server是否正常启动
  • 网络连通性(telnet测试8848端口)
  • 配置的namespace是否存在
  • 依赖是否正确引入

问题2:配置读取异常

  • 排查步骤:
  • 检查bootstrap.yml优先级
  • 确认dataId命名规范
  • 查看Nacos控制台配置内容
  • 开启debug日志:
  • properties
logging.level.com.alibaba.nacos=DEBUG

扩展能力集成

  1. 分布式事务:接入Seata框架
  2. 流量防护:集成Sentinel控制台
  3. 消息驱动:使用RocketMQ实现事件驱动架构
  4. 服务网格:结合Istio实现双模微服务

通过本方案可快速搭建基于Nacos的Spring Cloud微服务体系,建议在实施过程中:

  1. 建立完善的配置变更审核流程
  2. 制定服务命名规范(建议使用小写中线格式)
  3. 定期进行服务健康度巡检
  4. 使用Prometheus+Grafana构建监控大盘

相关推荐

一键生成高颜值图表!让你的文字瞬间有画面感,职场人必备!

哈喽,打工人们!忙碌的周中,大熊又来给你们带来一个超实用的效率神器啦!这次的宝藏网站绝对是那种用过就离不开的"真香"型产品!假设你明天就要做重要汇报,可面对一大堆密密麻麻的文字材料,你...

批量将 Word 转换为 PDF/Excel/Txt/图片等多种格式

Word文档是我们工作中经常会打交道的一种文档格式,我们也经常会有需要对Word文档进行格式转换的需求,比如将Word格式转换为PDF、将Word文档转换为Excel、将Word...

绝了!一键用AI生成高颜值动态PPT(附详细步骤+Prompt)

大家好,我是一名酷爱研究AI的产品经理,最近我有个新发现:那些花了你3天做出来的PPT,现在用AI可以1小时搞定!而且颜值还高!为什么AI做PPT比传统方式效率高10倍?我用一张图就能告诉你:AI生成...

ztext - 简单几行代码创建酷炫3D特效文字的开源JS库

把网页上的文字变成酷炫的3D风格,还能制作旋转动效,有了ztext.js,只需要几行代码。ztext能做什么ztext.js是一个能把常规的平面文字变成3D样式的前端开源代码库,让开发者...

文字内插入小图片,也太可爱了吧(文字中怎么插图片)

图文排版H5手机版秀米有小伙伴留言问添加图片的时候可不可以把图片添加到文字之间比如下面这句话中的小贴纸图片后面可以接着输入文字其实吧这就是咱们的『文字内插入小图片』功能嘛可以用来在文字内加个表情包又...

Linux环境下C++代码性能分析方法(linux怎么写c++代码)

技术背景在开发C++应用程序时,找出代码中运行缓慢的部分是进行性能优化的关键。在Linux系统上,有多种工具和方法可用于对C++代码进行性能分析,每种方法都有其特点和适用场景。实现步骤手动中断调试法在...

SVG互动图文,让你的文章更有趣!教你4种简单易学的黑科技玩法!

如果你是一个公众号创作者,那么你一定想知道如何让你的文章更加吸引人,更加有趣,更加有创意。你可能已经尝试过各种图文排版技巧,但是你是否知道,有一种黑科技可以让你的文章变得更加酷炫,更加互动,更加爆款?...

Videoscribe怎么实现实心中文汉字的手绘制作

很多朋友在制作手绘视频的时候,不知道怎么输入实心的中文汉字,之前我们已经给大家分享了怎么输入汉字的方法,但是有一点遗憾的是输出的汉字是空心的手绘展示,在视觉上并不是非常的美观。经过大家不断的探索,终于...

一款用于将文本转化成图表的现代化脚本语言

大家好,又见面了,我是GitHub精选君!今天要给大家推荐一个GitHub开源项目terrastruct/d2,该项目在GitHub有超过10.3kStar,用一句话介绍该项目就是:...

探秘 Web 水印技术(制作水印网站)

作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...

不忍心卸载的五款神仙工具(不忍心卸载的五款神仙工具是什么)

001.效率工具uTools-装机必备的生产力工具集uTools是一款非常强大的可以装下几乎所有效率工具的电脑生产力工具集,目前拥有Windows、Mac和Linux三个版本。软件界面...

「SVG」飞花令!这份最高检工作报告“超有料”

原标题:【SVG】飞花令!这份最高检工作报告“超有料”栏目主编:秦红文字编辑:沈佳灵来源:作者:最高人民检察院...

svg|2025政府工作报告,有没有你关心的数据?

··<setattributeName="visibility"begin="click+0s"dur="1ms"fill="freeze"restart="never"to="hi...

videoscribe只能输入英文,如何输入中文文本?

videoscribe只能输入英文,如何输入中文文本?打开VideoScribe软件,打开要添加中文字体的位置。打开Photoshop并在文件中创建一个新的透明背景图层。注意:必须是透明背景层。...

五个流行的SVG在线编辑器(svg编辑工具)

随着响应网络的发展,越来越多的高质量的SVG在线编辑器被公众所熟知。SVG矢量图形也越来越受欢迎,以便在任何设备上呈现图像,甚至一些易于使用的SVG在线编辑器,可以替代PS,本文总结了五种流行的SVG...