本地服务连接 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
相关推荐
夕除2 小时前
redis--服务器优化
redis
无人生还别怕2 小时前
如何安装任意版本docker
运维·docker·容器
xiaoqiMikko3 小时前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
帷幕落秋3 小时前
Docker镜像加速
运维·docker
帷幕落秋4 小时前
Docker原理-理论基础
运维·docker
TTATTC4 小时前
告别开源 Agent 的本地运维折磨:拆解阿里 QoderWork 的沙盒隔离架构与三级渐进式 Skills 编排实践
docker·开源
帷幕落秋4 小时前
Docker常见命令总结
docker
程序员老赵4 小时前
Docker 部署 Redmine:轻松搭建私有化项目管理平台
docker·容器·开源