文章目录
- 一、问题背景
- 二、环境调整
- 三、本地部署 Redis
- 四、本地部署 RocketMQ
- 五、修改本地配置
- 六、启动 OAuth 服务获取 Token
- 七、验证业务接口
- 八、总结
一、问题背景
本地开发时,由于部分服务异常,需要临时连接线上saas_test测试环境。
连接后发现:
- MySQL 可以正常访问;
- Nacos 配置中心可以正常使用;
- 但是线上 Redis 和 RocketMQ 网络不可达,本地服务无法正常运行。
因此采用方案:
数据库和 Nacos 继续使用测试环境,本地虚拟机通过 Docker 部署 Redis 和 RocketMQ。
二、环境调整
最终架构:
本地 SpringBoot 服务 | | +---- MySQL(测试环境) | +---- Nacos(测试环境) | +---- Redis(本地 Docker) | +---- RocketMQ(本地 Docker)三、本地部署 Redis
查看已有镜像:
dockerimages拉取 Redis:
dockerpull redis:7启动:
dockerrun-d\--nameredis\-p6379:6379\redis:7检查:
dockerps确认 Redis 正常运行。
四、本地部署 RocketMQ
拉取镜像:
dockerpull apache/rocketmq:5.5.0启动 NameServer:
dockerrun-d\--namerocketmq-nameserver\-p9876:9876\apache/rocketmq:5.5.0\shmqnamesrv启动 Broker:
dockerrun-d\--namerocketmq-broker\-p10911:10911\apache/rocketmq:5.5.0五、修改本地配置
原本项目依赖线上 MQ、Redis:
rocketmq:name-server:xxx.xxx.xxx.xxx:9876修改为本地虚拟机地址:
rocketmq:name-server:192.168.x.x:9876Redis:
spring:redis:host:192.168.x.xport:6379六、启动 OAuth 服务获取 Token
业务接口需要认证,因此需要先启动 OAuth 服务。
流程:
登录接口 | ↓ OAuth 服务生成 Token | ↓ Token 保存 Redis | ↓ 业务接口携带 Token 请求使用 Postman 调用登录接口:
POST /oauth/token获取:
{"access_token":"xxxx"}七、验证业务接口
请求业务接口时添加:
Authorization: Bearer token服务会:
- 校验 Token;
- 查询 Redis;
- 验证通过后访问业务逻辑。
八、总结
本次问题主要是:
本地环境无法直接访问线上 Redis 和 MQ。
解决方式:
- 保留线上 MySQL、Nacos;
- 本地 Docker 部署 Redis、RocketMQ;
- 启动 OAuth 服务获取 Token;
- 使用 Postman 完成接口验证。
最终实现本地服务接近测试环境运行,方便开发调试。
server: port:2020spring: application: name: es-base-server datasource: dynamic: primary: master strict:falsedatasource: 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:# 共享配置文件# -># refresh: true# -># refresh: true->true->true# -># refresh: true->true->truerocketmq: name-server:${ROCKETMQ_HOST:rocketmq-ip}:9876 http: read: timeout:5000connect: timeout:5000servlet: multipart: max-file-size: 100MB max-request-size: 500MB button: fldState:true