文章目录
一、问题背景
本地开发时,由于部分服务异常,需要临时连接线上 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
服务会:
- 校验 Token;
- 查询 Redis;
- 验证通过后访问业务逻辑。
八、总结
本次问题主要是:
本地环境无法直接访问线上 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