本地服务连接 SaaS 测试环境实践:Docker 部署 Redis 与 RocketMQ 完成接口联调

文章目录

一、问题背景

本地开发时,由于部分服务异常,需要临时连接线上 saas_test 测试环境。

连接后发现:

  • MySQL 可以正常访问;
  • Nacos 配置中心可以正常使用;
  • 但是线上 Redis 和 RocketMQ 网络不可达,本地服务无法正常运行。

因此采用方案:

数据库和 Nacos 继续使用测试环境,本地虚拟机通过 Docker 部署 Redis 和 RocketMQ。


二、环境调整

最终架构:

复制代码
本地 SpringBoot 服务
        |
        |
        +---- MySQL(测试环境)
        |
        +---- Nacos(测试环境)
        |
        +---- Redis(本地 Docker)
        |
        +---- RocketMQ(本地 Docker)

三、本地部署 Redis

查看已有镜像:

bash 复制代码
docker images

拉取 Redis:

bash 复制代码
docker pull redis:7

启动:

bash 复制代码
docker run -d \
--name redis \
-p 6379:6379 \
redis:7

检查:

bash 复制代码
docker ps

确认 Redis 正常运行。


四、本地部署 RocketMQ

拉取镜像:

bash 复制代码
docker pull apache/rocketmq:5.5.0

启动 NameServer:

bash 复制代码
docker run -d \
--name rocketmq-nameserver \
-p 9876:9876 \
apache/rocketmq:5.5.0 \
sh mqnamesrv

启动 Broker:

bash 复制代码
docker run -d \
--name rocketmq-broker \
-p 10911:10911 \
apache/rocketmq:5.5.0

五、修改本地配置

原本项目依赖线上 MQ、Redis:

yaml 复制代码
rocketmq:
  name-server: xxx.xxx.xxx.xxx:9876

修改为本地虚拟机地址:

yaml 复制代码
rocketmq:
  name-server: 192.168.x.x:9876

Redis:

yaml 复制代码
spring:
  redis:
    host: 192.168.x.x
    port: 6379

六、启动 OAuth 服务获取 Token

业务接口需要认证,因此需要先启动 OAuth 服务。

流程:

复制代码
登录接口
    |
    ↓
OAuth 服务生成 Token
    |
    ↓
Token 保存 Redis
    |
    ↓
业务接口携带 Token 请求

使用 Postman 调用登录接口:

复制代码
POST /oauth/token

获取:

json 复制代码
{
  "access_token":"xxxx"
}

七、验证业务接口

请求业务接口时添加:

复制代码
Authorization: Bearer token

服务会:

  1. 校验 Token;
  2. 查询 Redis;
  3. 验证通过后访问业务逻辑。

八、总结

本次问题主要是:

本地环境无法直接访问线上 Redis 和 MQ。

解决方式:

  • 保留线上 MySQL、Nacos;
  • 本地 Docker 部署 Redis、RocketMQ;
  • 启动 OAuth 服务获取 Token;
  • 使用 Postman 完成接口验证。

最终实现本地服务接近测试环境运行,方便开发调试。

bash 复制代码
server:
  port: 2020

spring:
  application:
    name: es-base-server

  datasource:
    dynamic:
      primary: master
      strict: false
      datasource:
        master:
          url: jdbc:mysql://数据库地址:3306/database_name
          username: 数据库用户名
          password: 数据库密码
          driver-class-name: com.mysql.cj.jdbc.Driver

  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_HOST:nacos-ip}:8848
        username: ${NACOS_USER:nacos}
        password: ${NACOS_PASSWORD:******}

      config:
        server-addr: ${NACOS_HOST:nacos-ip}:8848
        namespace: ${NACOS_NAMESPACE:namespace-id}
        file-extension: yaml
        username: ${NACOS_USER:nacos}
        password: ${NACOS_PASSWORD:******}

        shared-configs:
          # 共享配置文件
#          - data-id: database.yaml
#            refresh: true
#          - data-id: redis.yaml
#            refresh: true
          - data-id: mybatis-plus.yaml
            refresh: true
          - data-id: common.yaml
            refresh: true
#          - data-id: rocketmq.yaml
#            refresh: true
          - data-id: share.yaml
            group: DEFAULT_GROUP
            refresh: true
          - data-id: xxl-job.yaml
            refresh: true


rocketmq:
  name-server: ${ROCKETMQ_HOST:rocketmq-ip}:9876


http:
  read:
    timeout: 5000
  connect:
    timeout: 5000
  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 500MB


button:
  fldState: true
相关推荐
IT利刃出鞘7 小时前
Docker Compose--解决修改配置后不生效的问题
运维·docker·容器
java_logo7 小时前
Docker 部署 CloudBeaver:轻松搭建网页数据库管理平台
数据库·docker·容器·数据库管理·dbeaver·轩辕镜像·cloudbeaver
Lsetea7 小时前
Docker更新SSL证书后容器仍读旧文件:单文件挂载与目录挂载排查
运维·nginx·docker·https·ssl证书
好用斋8 小时前
拾光坞安装网盘聚合LitePan:把Docker命令翻译成图形界面
运维·docker·容器
用户094248568039 小时前
第19章:库存扣减与秒杀系统:Redis 扛峰值流量
redis·架构·源码
对象存储与RustFS9 小时前
Velero 接 RustFS 实操:K8s 集群备份落到自建对象存储
后端·docker·云原生
爱写Bug的浮游9 小时前
RTA高频请求下的Redis短缓存工程闭环
redis
没有气的汽水9 小时前
redis加了个分片,把线上写挂了一个多小时
redis
xixiaoyunya10 小时前
Redis缓存三大问题实战:穿透、击穿、雪崩,我用一个电商秒杀场景讲清楚
数据库·redis·缓存
鶴哥只手遮天12 小时前
《Redis 8.10.3 深度剖析》系列 · 第 1 章·全景与源码地图:版本谱系、构建体系、全局状态与启动链路
redis·后端·开源