Skip to content

微服务部署指南

本文档适用于微服务(Cloud)模式部署。假设 MySQL、Redis、Nacos 等中间件已就绪。

微服务模式下,各业务模块独立打包为 JAR,通过 Nacos 注册发现,由 API Gateway 统一对外暴露接口。


一、架构总览

                                    ┌─────────────────────────────┐
                                    │         Nacos 注册中心       │
                                    │    服务注册 / 配置管理        │
                                    └──────────┬──────────────────┘
                                               │ 注册 & 发现
                           ┌───────────────────┼───────────────────┐
                           │                   │                   │
                  ┌────────▼───────┐  ┌────────▼───────┐  ┌───────▼────────┐
    浏览器 ──────►│  Nginx (:80)   │  │                │  │                │
                  │  /web → 前端    │  │                │  │                │
                  │  /admin-api →  │  │                │  │                │
                  │    Gateway     │  │                │  │                │
                  └───────┬────────┘  │                │  │                │
                          │           │                │  │                │
                  ┌───────▼────────┐  │                │  │                │
                  │  Gateway       │  │  system-server │  │  infra-server  │
                  │  (:48080)      │──│  (:48081)      │  │  (:48082)      │
                  │  路由 & 鉴权    │  │                │  │                │
                  └───────┬────────┘  └────────────────┘  └────────────────┘

          ┌───────┬───────┼───────┬───────┬───────┬───────┐
          │       │       │       │       │       │       │
      bpm-server  │  report-server │  pay-server   │   ...更多服务
      (:48083)    │  (:48084)      │  (:48085)     │
                  │                │               │
             oa-server        crm-server      erp-server
             (:48101)         (:48089)        (:48088)

二、服务清单与端口

服务名称服务标识默认端口说明
API 网关gateway-server48080Spring Cloud Gateway,统一入口
系统服务system-server48081用户、角色、菜单、权限、租户
基础设施服务infra-server48082文件、代码生成、配置、日志、WebSocket
工作流服务bpm-server48083Flowable 工作流引擎
报表服务report-server48084积木报表
支付服务pay-server48085支付渠道、退款
公众号服务mp-server48086微信公众号管理
会员服务member-server48087C 端会员体系
ERP 服务erp-server48088采购、销售、库存、财务
CRM 服务crm-server48089线索、客户、商机、合同
AI 服务ai-server48090大模型对话、知识库
IoT 服务iot-server48091物联网设备管理
商城-商品product-server48100商品 SPU/SKU
OA 服务oa-server48101协同办公
商城-交易trade-server48102订单、售后
商城-统计statistics-server48103数据统计
HRM 服务hrm-server48102人力资源管理
资产服务asset-server48101资产管理
仓储服务wms-server48101仓储管理
合同服务contract-server48110合同管理
项目服务project-server48110项目管理
财务服务finance-server48108财务管理
MES 服务mes-server48091生产制造

⚠️ 部分服务默认端口存在复用:例如 oa-serverasset-serverwms-serverpromotion-server 默认都可能是 48101hrm-servertrade-server 默认可能同为 48102iot-servermes-server 默认可能同为 48091contract-serverproject-server 默认可能同为 48110。如果部署在同一台服务器,必须通过服务配置或启动参数调整端口,例如 --server.port=48111;如果部署在不同服务器,可以保留默认端口。


三、构建

3.1 微服务模式构建(全量)

bash
# 在后端项目根目录 ruoyi-office/ 执行,构建所有模块
mvn clean package -Pcloud -Dmaven.test.skip=true

pom.xml 默认激活 cloud profile,但生产构建建议显式增加 -Pcloud,避免本地环境曾切换过 profile 导致误打包。微服务模式下 skip.repackage=false,每个 -server 子模块都会打出可执行的 Fat JAR。

3.2 构建指定模块

bash
# 只构建网关 + 系统服务 + 基础设施服务(最小可用集)
mvn clean package -Pcloud -Dmaven.test.skip=true \
    -pl yudao-gateway,yudao-module-system/yudao-module-system-server,yudao-module-infra/yudao-module-infra-server \
    -am

3.3 构建产物位置

text
yudao-gateway/target/yudao-gateway.jar
yudao-module-system/yudao-module-system-server/target/yudao-module-system-server.jar
yudao-module-infra/yudao-module-infra-server/target/yudao-module-infra-server.jar
yudao-module-bpm/yudao-module-bpm-server/target/yudao-module-bpm-server.jar
yudao-module-oa/yudao-module-oa-server/target/yudao-module-oa-server.jar
...(其他模块同理)

3.4 前端构建

bash
cd ruoyi-office-vben

pnpm install
# 或使用 pnpm i,确保本地 Node / pnpm 版本与项目要求一致
pnpm -r --filter "./packages/**" --filter "./internal/**" build

# 推荐直接使用项目脚本构建 web-antd
pnpm build:antd

# 产物:apps/web-antd/dist/

四、Nacos 配置

微服务模式依赖 Nacos 作为注册中心和配置中心。

4.1 各服务连接 Nacos

每个 -server 模块的 application-prod.yaml、Nacos 配置,或启动参数(推荐)需配置:

yaml
spring:
  cloud:
    nacos:
      server-addr: 你的Nacos地址:8848
      username: nacos
      password: nacos密码
      discovery:
        namespace: prod          # 生产命名空间
        group: DEFAULT_GROUP
      config:
        namespace: prod
        group: DEFAULT_GROUP

如果 discovery/config 使用不同地址,也可分别配置:

yaml
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 你的Nacos地址:8848
      config:
        server-addr: 你的Nacos地址:8848

4.2 环境变量覆盖(推荐)

启动时通过环境变量传入,无需修改配置文件:

bash
java -jar xxx-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod

4.3 Nacos 中的配置文件

在 Nacos 控制台 → 配置管理中,为各服务创建对应的配置文件:

Data IDGroup说明
gateway-server-prod.yamlDEFAULT_GROUP网关配置
system-server-prod.yamlDEFAULT_GROUP系统服务配置(数据库、Redis 等)
infra-server-prod.yamlDEFAULT_GROUP基础设施服务配置
bpm-server-prod.yamlDEFAULT_GROUP工作流服务配置
oa-server-prod.yamlDEFAULT_GROUPOA 服务配置
hrm-server-prod.yamlDEFAULT_GROUPHRM 服务配置
...其他服务同理

配置示例(system-server-prod.yaml,其他业务服务也要配置同一套 MySQL、Redis、租户、日志、MQ 等公共配置):

yaml
spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          url: jdbc:mysql://数据库IP:3306/ruoyi-office?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
          username: root
          password: 数据库密码
  data:
    redis:
      host: Redis地址
      port: 6379
      database: 0
      password: Redis密码 # 无密码可删除

当前工程主要使用 spring.data.redis。如果你的运行版本仍使用旧配置键,请按实际代码版本改为 spring.redis,不要两套配置混用导致连接到不同 Redis。

4.4 公共配置一致性检查

微服务最常见的阻断问题不是单个服务无法启动,而是公共配置不一致。上线前请确认:

  • 所有服务连接同一个业务数据库,或连接同一套分库规则。
  • 所有服务连接同一个 Redis;如果 BPM 使用 Redis Stream 通知,bpm-server 和业务服务必须连接同一个 Redis database。
  • 所有服务使用同一个 Nacos namespace 和 group。
  • 所有服务的租户、多数据源、加密密钥、日志级别、RPC 超时配置一致。
  • 如果启用文件上传、报表、WebSocket、消息队列等能力,相关服务配置不能只写在 system-server,需要写到实际使用该能力的服务。

五、部署后端服务

5.1 上传 JAR 到服务器

bash
# 上传到统一目录
scp yudao-gateway/target/yudao-gateway.jar                                           root@服务器IP:/data/app/gateway/
scp yudao-module-system/yudao-module-system-server/target/yudao-module-system-server.jar  root@服务器IP:/data/app/system/
scp yudao-module-infra/yudao-module-infra-server/target/yudao-module-infra-server.jar    root@服务器IP:/data/app/infra/
scp yudao-module-bpm/yudao-module-bpm-server/target/yudao-module-bpm-server.jar          root@服务器IP:/data/app/bpm/
scp yudao-module-oa/yudao-module-oa-server/target/yudao-module-oa-server.jar             root@服务器IP:/data/app/oa/
scp yudao-module-hrm/yudao-module-hrm-server/target/yudao-module-hrm-server.jar          root@服务器IP:/data/app/hrm/
# ...其他模块同理

5.2 启动顺序

微服务间有依赖关系,建议按以下顺序启动。Gateway 可先启动,但在 system/infra 未注册前请求会 503,因此生产脚本建议先启动基础服务,再开放网关流量:

text
1. system-server       (系统服务,核心基础)
2. infra-server        (基础设施,依赖 system)
3. bpm-server          (工作流,业务流程依赖)
4. 业务服务            (oa / hrm / asset / contract / crm / erp / pay / ...)
5. gateway-server      (网关,依赖 Nacos;也可提前启动,但需等待目标服务注册)

5.3 启动命令

通用启动模板:

bash
nohup java -Xms512m -Xmx1024m \
    -jar /data/app/服务目录/xxx-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=Nacos地址:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    > /data/app/服务目录/nohup.out 2>&1 &

如多个服务部署在同一台服务器且默认端口冲突,请额外增加:

bash
--server.port=实际端口

完整启动示例

bash
# ① 系统服务
nohup java -Xms512m -Xmx1024m \
    -jar /data/app/system/yudao-module-system-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    > /data/app/system/nohup.out 2>&1 &

sleep 30

# ② 基础设施服务
nohup java -Xms512m -Xmx1024m \
    -jar /data/app/infra/yudao-module-infra-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    > /data/app/infra/nohup.out 2>&1 &

sleep 30

# ③ 工作流服务
nohup java -Xms512m -Xmx1024m \
    -jar /data/app/bpm/yudao-module-bpm-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    > /data/app/bpm/nohup.out 2>&1 &

# ④ OA 服务
nohup java -Xms512m -Xmx1024m \
    -jar /data/app/oa/yudao-module-oa-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    --server.port=48101 \
    > /data/app/oa/nohup.out 2>&1 &

# ⑤ HRM 服务;如果与 trade-server 同机,需调整其中一个端口
nohup java -Xms512m -Xmx1024m \
    -jar /data/app/hrm/yudao-module-hrm-server.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    --server.port=48104 \
    > /data/app/hrm/nohup.out 2>&1 &

# ⑥ 网关服务
nohup java -Xms256m -Xmx512m \
    -jar /data/app/gateway/yudao-gateway.jar \
    --spring.profiles.active=prod \
    --spring.cloud.nacos.server-addr=192.168.30.100:8848 \
    --spring.cloud.nacos.discovery.namespace=prod \
    --spring.cloud.nacos.config.namespace=prod \
    > /data/app/gateway/nohup.out 2>&1 &

5.4 验证服务注册

启动完成后,访问 Nacos 控制台 → 服务管理 → 服务列表,确认各服务已注册:

text
http://Nacos地址:8848/nacos

应该能看到 gateway-serversystem-serverinfra-serverbpm-serveroa-serverhrm-server 等服务实例。


六、部署前端

6.1 确认前端环境变量

apps/web-antd/.env.production

bash
VITE_BASE_URL=
VITE_GLOB_API_URL=/admin-api

前端通过 Nginx 代理 /admin-api → Gateway(:48080),Gateway 再根据路由规则转发到各微服务。

6.2 上传到服务器

bash
ssh root@服务器IP "rm -rf /data/nginx/html/web/*"
scp -r apps/web-antd/dist/* root@服务器IP:/data/nginx/html/web/

七、Nginx 配置

微服务模式下 Nginx 只需反代到 Gateway(而非各个微服务),由 Gateway 负责路由分发。

nginx
server {
    listen 80;
    server_name _;

    # 1. 前端静态文件
    location /web {
        alias /data/nginx/html/web;
        index index.html;
        try_files $uri $uri/ /web/index.html;
    }

    # 2. 后端 API → 全部转发到 Gateway
    location /admin-api {
        proxy_pass http://127.0.0.1:48080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # 3. WebSocket 连接
    location /infra/ws {
        proxy_pass http://127.0.0.1:48080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 4. 接口文档(Knife4j 聚合)
    location /doc.html {
        proxy_pass http://127.0.0.1:48080;
        proxy_set_header Host $host;
    }

    # 5. 根路径跳转
    location = / {
        return 302 /web;
    }
}

修改后重新加载:

bash
nginx -t && nginx -s reload

八、Gateway 路由规则

Gateway 根据 URL 前缀将请求转发到对应微服务(已内置,通常无需修改):

URL 前缀转发目标服务示例
/admin-api/system/**system-server登录、用户、角色
/admin-api/infra/**infra-server文件上传、配置
/admin-api/bpm/**bpm-server流程定义、审批
/admin-api/oa/**oa-serverOA 协同办公
/admin-api/crm/**crm-server客户管理
/admin-api/erp/**erp-server进销存
/admin-api/pay/**pay-server支付
/admin-api/member/**member-server会员
/admin-api/report/**report-server报表
/admin-api/mp/**mp-server公众号
/admin-api/ai/**ai-serverAI 大模型
/admin-api/iot/**iot-server物联网
/admin-api/hrm/**hrm-server人力资源
/admin-api/asset/**asset-server资产管理
/admin-api/product/**product-server商品
/admin-api/trade/**trade-server交易
/admin-api/promotion/**promotion-server营销
/admin-api/statistics/**statistics-server统计

Gateway 使用 grayLb:// 协议,支持基于 Nacos 的服务发现 + 负载均衡。


九、微服务下 BPM 流程通知配置(重要)

微服务部署时,BPM 引擎运行在 bpm-server,业务单据运行在 oa-serverhrm-serverasset-server 等服务。流程到达结束节点后,Flowable 会自动结束流程实例,但业务单据表里的 process_status 需要通过跨服务通知回写。

如果仍使用单体模式的本地事件通知,可能出现以下现象:

  • 流程图已经到“结束”节点,但右上角业务状态仍显示“审批中”。
  • 业务单据 process_status 仍为 1,没有更新为审批通过 2
  • 补卡、销假、资产调拨、合同生效等 onProcessApproved 后置逻辑没有执行。
  • 审批记录表中没有结束节点,但流程图已结束。结束节点不是用户任务,不一定出现在审批记录表;真正要看业务状态是否回写。

9.1 推荐方案:Redis Stream MQ

当前工程已内置 Redis Stream 消息类和消费者:

  • 发送方:bpm-server 中的 BpmMqNotificationHandler
  • 消息 Stream Key:bpm.workflow.instance.status.changed
  • 消费方:各业务服务的 *MqNotificationConsumer,例如 HRM 的 HrmMqNotificationConsumer

bpm-server 配置

在 Nacos 的 bpm-server-prod.yaml 中增加:

yaml
yudao:
  bpm:
    notification:
      # 微服务部署必须使用 mq 或 feign;不要使用 local
      default-type: mq
      # 建议先同步发送,排查稳定后可改为 true
      async: false
      mq:
        enabled: true
      feign:
        enabled: false
      # 可选:只指定部分流程走 MQ;如果 default-type 已是 mq,可不配
      process-config:
        hr_leave_cancel_bill: mq
        hr_card_replacement_bill: mq
        oa_leave: mq
        oa_car_apply_bill: mq

同时确认 bpm-server 连接到与业务服务相同的 Redis:

yaml
spring:
  data:
    redis:
      host: Redis地址
      port: 6379
      database: 0
      password: Redis密码

业务服务配置

所有需要接收 BPM 审批结果的业务服务也必须连接同一个 Redis,例如 hrm-server-prod.yaml

yaml
spring:
  data:
    redis:
      host: Redis地址
      port: 6379
      database: 0
      password: Redis密码

并确认业务服务依赖中包含 MQ starter。HRM 服务当前已包含:

xml
<dependency>
    <groupId>cn.iocoder.cloud</groupId>
    <artifactId>yudao-spring-boot-starter-mq</artifactId>
</dependency>

9.2 Redis MQ 验证

启动后检查日志。

bpm-server 应出现:

text
注册通知处理器: 消息队列通知
[handleNotification][MQ通知] 发送流程状态变化消息
[handleNotification][MQ通知] 流程状态变化消息发送成功

业务服务,例如 hrm-server,应出现:

text
[redisStreamMessageListenerContainer][完成注册 StreamKey(bpm.workflow.instance.status.changed) 对应的监听器(...HrmMqNotificationConsumer)]
[onMessage][MQ消费] 收到BPM事件消息
[invokeLifecycleHooks] 流程审批通过,触发 onProcessApproved

也可在 Redis 中检查:

bash
redis-cli XINFO STREAM bpm.workflow.instance.status.changed
redis-cli XINFO GROUPS bpm.workflow.instance.status.changed
redis-cli XPENDING bpm.workflow.instance.status.changed hrm-server

Redis Stream 消费组默认使用 spring.application.name,因此 HRM 的消费组通常是 hrm-server,OA 的消费组通常是 oa-server

9.3 常见故障定位

现象优先检查
流程图已结束,业务状态仍审批中bpm-server 是否配置 default-type: mq,业务服务是否消费到消息
Redis Stream 有消息但业务服务没处理业务服务是否连接同一 Redis、是否注册 *MqNotificationConsumer、消费组是否存在
消费日志有异常检查业务单据是否存在、businessKey 是否正确、租户上下文是否正确
补卡审批通过但考勤记录未生成HRM 的 onProcessApproved 是否执行,hrm_punch_record 是否有对应日期记录
Nacos 正常但接口 503Gateway 目标服务名和 Nacos 注册名是否一致,服务是否健康

9.4 关于 Feign 通知

当前工程也有 feign 通知方式,但现有 BpmFeignNotificationHandler 主要按 OA 流程做了示例分发。如果要用 Feign 覆盖 HRM、资产、合同等模块,需要扩展 BPM 侧分发逻辑和各模块的 Feign API。生产环境更推荐先使用 Redis Stream MQ,配置简单且适合多业务模块广播消费。

注意:如代码中异步开关读取的是 yudao.bmp.notification.async,而配置写的是 yudao.bpm.notification.async,会导致 async 配置不生效。建议代码与配置统一为 yudao.bpm.notification.async


十、验证

10.1 检查各服务

bash
# 检查 Gateway
curl http://127.0.0.1:48080/actuator/health

# 检查 system-server
curl http://127.0.0.1:48081/actuator/health

# 检查 infra-server
curl http://127.0.0.1:48082/actuator/health

# 通过 Gateway 访问系统接口
curl http://127.0.0.1:48080/admin-api/system/auth/get-permission-info

10.2 检查前端

浏览器访问 http://服务器IP/web,正常显示登录页,输入账号密码能登录成功。

10.3 检查接口文档

访问 http://服务器IP:48080/doc.html,Gateway 会聚合所有微服务的 Swagger 文档。


十一、一键启停脚本

11.1 一键启动(start-all.sh)

bash
#!/bin/bash
# start-all.sh - 按依赖顺序启动所有微服务

NACOS_ADDR="192.168.30.100:8848"
NAMESPACE="prod"
PROFILE="prod"
BASE_DIR="/data/app"

start_service() {
    local name=$1
    local jar=$2
    local xms=${3:-512m}
    local xmx=${4:-1024m}
    local dir="$BASE_DIR/$name"

    echo "🚀 启动 $name ..."
    mkdir -p "$dir"
    nohup java -Xms$xms -Xmx$xmx \
        -jar "$dir/$jar" \
        --spring.profiles.active=$PROFILE \
        --spring.cloud.nacos.server-addr=$NACOS_ADDR \
        --spring.cloud.nacos.discovery.namespace=$NAMESPACE \
        --spring.cloud.nacos.config.namespace=$NAMESPACE \
        > "$dir/nohup.out" 2>&1 &
    echo "  PID: $!"
}

# 按依赖顺序启动
start_service "system"  "yudao-module-system-server.jar"
sleep 30
start_service "infra"   "yudao-module-infra-server.jar"
sleep 20
start_service "bpm"     "yudao-module-bpm-server.jar"
sleep 20

# 以下业务服务可并行启动;同机端口冲突时,请在 Nacos 或启动参数中改 server.port
start_service "oa"      "yudao-module-oa-server.jar"
start_service "hrm"     "yudao-module-hrm-server.jar"
# 按需添加更多服务...
# start_service "crm"   "yudao-module-crm-server.jar"
# start_service "erp"   "yudao-module-erp-server.jar"
# start_service "pay"   "yudao-module-pay-server.jar"
# start_service "ai"    "yudao-module-ai-server.jar" "512m" "2048m"

# 最后启动网关,或提前启动但等待目标服务注册后再开放流量
start_service "gateway" "yudao-gateway.jar" "256m" "512m"

echo ""
echo "✅ 所有服务启动命令已下发,请等待 1-2 分钟后检查 Nacos 服务列表"

11.2 一键停止(stop-all.sh)

bash
#!/bin/bash
# stop-all.sh - 停止所有微服务

SERVICES=(
    "yudao-gateway"
    "yudao-module-system-server"
    "yudao-module-infra-server"
    "yudao-module-bpm-server"
    "yudao-module-oa-server"
    "yudao-module-hrm-server"
    # 按需添加...
)

for svc in "${SERVICES[@]}"; do
    PID=$(ps -ef | grep "$svc" | grep -v grep | awk '{print $2}')
    if [ -n "$PID" ]; then
        echo "⏹️  停止 $svc (PID: $PID)"
        kill $PID
    else
        echo "⏭️  $svc 未运行"
    fi
done

echo "✅ 停止命令已发送"

11.3 查看运行状态(status.sh)

bash
#!/bin/bash
# status.sh - 查看所有微服务状态

echo "========================================"
echo "  微服务运行状态"
echo "========================================"

SERVICES=(
    "yudao-gateway:48080"
    "yudao-module-system-server:48081"
    "yudao-module-infra-server:48082"
    "yudao-module-bpm-server:48083"
    "yudao-module-oa-server:48101"
    "yudao-module-hrm-server:48102"
)

for entry in "${SERVICES[@]}"; do
    svc="${entry%%:*}"
    port="${entry##*:}"
    PID=$(ps -ef | grep "$svc" | grep -v grep | awk '{print $2}')

    if [ -n "$PID" ]; then
        echo "✅ $svc (PID: $PID, 端口: $port)"
    else
        echo "❌ $svc 未运行"
    fi
done

十二、单体模式 vs 微服务模式对比

对比项单体模式微服务模式
构建命令mvn package -pl yudao-server -am -Dskip.repackage=truemvn package
Maven Profile-Pboot(或 -Pprod -Dskip.repackage=true-Pcloud(默认)
产出1 个 JAR(yudao-server.jar)N 个 JAR(每个模块一个)
注册中心不需要需要 Nacos
API 入口直接访问 :48080Gateway :48080 → 各服务
Nginx 反代/admin-api → :48080/admin-api → Gateway :48080
服务器要求4GB+ 内存8GB+ 内存(推荐 16GB)
适用场景中小团队、快速上线大团队、高并发、独立扩缩容

十三、常见问题

Q1: 服务启动后在 Nacos 看不到

bash
# 检查 Nacos 连接
curl http://Nacos地址:8848/nacos/v1/ns/instance/list?serviceName=system-server

# 检查启动日志
tail -100 /data/app/system/nohup.out | grep -i nacos

# 常见原因:
# 1. Nacos 地址配错
# 2. namespace 不匹配
# 3. 网络不通(telnet Nacos地址 8848)

Q2: Gateway 报 503 Service Unavailable

bash
# 目标服务尚未启动或注册,等待 30s 重试
# 检查目标服务是否在 Nacos 注册
curl http://Nacos地址:8848/nacos/v1/ns/instance/list?serviceName=system-server

Q3: 服务间调用超时

bash
# 检查调用链路,确认目标服务正常
curl http://127.0.0.1:目标端口/actuator/health

# 适当调大 Feign 超时
# 在 Nacos 配置中添加:
# spring.cloud.openfeign.client.config.default.connect-timeout=10000
# spring.cloud.openfeign.client.config.default.read-timeout=30000

Q4: 内存不够,想只启动部分服务

最小可用集(管理后台基本功能):

gateway-server + system-server + infra-server

加上 OA 和工作流:

gateway-server + system-server + infra-server + bpm-server + oa-server

内存估算:每个服务约 512MB ~ 1GB,Gateway 约 256MB。

Q5: 流程已经到结束节点,但业务状态还是审批中

这是微服务部署最容易遗漏的配置。请按下面顺序排查:

bash
# 1. 看 bpm-server 是否发送 MQ 通知
tail -100 /data/app/bpm/nohup.out | grep -E "MQ通知|sendNotification|流程状态变化"

# 2. 看业务服务是否注册 Redis Stream 监听器,例如 HRM
tail -100 /data/app/hrm/nohup.out | grep -E "HrmMqNotificationConsumer|bpm.workflow.instance.status.changed|MQ消费|onProcessApproved"

# 3. 查 Redis Stream
redis-cli XINFO STREAM bpm.workflow.instance.status.changed
redis-cli XINFO GROUPS bpm.workflow.instance.status.changed

如果 bpm-server 使用的是 default-type: local,在微服务部署下业务服务收不到本地 Spring 事件,需要改为 微服务下 BPM 流程通知配置 中的 mq 配置。

Q6: 如何切换到单体模式

bash
# 单体模式只需一个 JAR,无需 Nacos
mvn clean package -Pboot -Dmaven.test.skip=true -Dskip.repackage=true -pl yudao-server -am

java -jar yudao-server/target/yudao-server.jar --spring.profiles.active=prod

详见 快速部署指南

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版