优化:完善 Docker Compose 部署与 RocketMQ 版本整合

主要变更:
- RocketMQ Server 从 5.1.4 升级到 5.3.1,修复 Broker NPE 启动失败问题
- Dockerfile 基础镜像从 openjdk:17 切换为 eclipse-temurin:17-jre
- 修复 RocketMQ volume 权限问题(user: "0:0")
- 补充 NameServer 健康检查,Broker 等待 NameServer 就绪后启动
- 统一各模块 conf/ 数据库密码与 docker-compose 一致
- 更新 README Docker 部署文档:镜像加速源、组件版本、常见问题排查

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
阿全-研发
2026-04-10 17:55:02 +08:00
co-authored by Claude Opus 4.6
parent 7549c07ada
commit 3ad9ecf002
24 changed files with 363 additions and 67 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
# ui项目的根路径
UI_BASE_DIR=/Users/dingzhiwei/work/idea_wk/gitee_wk
UI_BASE_DIR=/Users/dingzhiwei/work/dev/jeepay-open
+120 -21
View File
@@ -296,7 +296,36 @@ jeepay-open/
### 构建前准备
#### 1. 编译后端 JAR
#### 1. 配置 Docker 国内镜像加速(强烈建议)
国内网络拉取 Docker Hub 镜像较慢或被墙,建议配置多个镜像加速源(单个源随时可能失效,Docker 会自动 fallback)。
Docker daemon 配置示例:
```json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://docker.xuanyuan.me",
"https://hub.rat.dev",
"https://docker.1panel.live"
]
}
```
配置位置:
- **Linux**`/etc/docker/daemon.json`,修改后执行 `sudo systemctl restart docker`
- **Docker DesktopmacOS / Windows**Settings -> Docker Engine,写入上述 JSON 后点击 Apply & Restart
验证是否生效:
```bash
docker info | grep -A 5 "Registry Mirrors"
```
#### 2. 编译后端 JAR
`jeepay` 根目录执行:
@@ -310,14 +339,24 @@ mvn clean package -DskipTests
- `jeepay-manager/target/jeepay-manager.jar`
- `jeepay-merchant/target/jeepay-merchant.jar`
#### 2. 准备前端代码
#### 3. 准备前端代码
确保 `jeepay-ui` 仓库已拉取到本地,且目录结构满足上面的要求。
### 启动方式
```bash
# 首次启动(编译镜像 + 启动)
docker compose up -d --build
# 后续启动(跳过编译)
docker compose up -d
# 仅重新编译后端服务
docker compose build payment manager merchant
# 重启某个服务
docker compose restart payment
```
### 启动前校验
@@ -328,27 +367,87 @@ docker compose config
### 默认暴露端口
| 组件 | 端口 |
|---|---|
| MySQL | `3306` |
| Redis | `6380` |
| RocketMQ NameServer | `9876` |
| RocketMQ Broker | `10909` / `10911` / `10912` |
| payment | `9216` |
| manager | `9217` |
| merchant | `9218` |
| manager UI | `9227` |
| merchant UI | `9228` |
| cashier UI | `9226` |
| 组件 | 端口 | 说明 |
|---|---|---|
| MySQL | `13306` | 映射宿主机 13306,避免与本地 MySQL 冲突 |
| Redis | `6380` | |
| RocketMQ NameServer | `9876` | |
| RocketMQ Broker | `10909` / `10911` / `10912` | |
| payment | `9216` | 支付网关 |
| manager | `9217` | 运营平台后端 |
| merchant | `9218` | 商户系统后端 |
| manager UI | `9227` | 运营平台前端 |
| merchant UI | `9228` | 商户系统前端 |
| cashier UI | `9226` | 收银台前端 |
### 说明
### 默认账号
- Compose 默认使用 RocketMQ,已补齐 `rocketmq-namesrv``rocketmq-broker`,并统一设置 `restart: always`,用于提升 Docker 部署的自动恢复能力。
- `conf/payment``conf/manager``conf/merchant` 已默认切换为 `rocketMQ`,同时将 Docker 场景下的 MySQL / Redis 主机名修正为 `mysql``redis`
- Java 服务挂载的配置文件路径已与模块 Dockerfile 对齐。
- Compose 当前默认使用模块内 Dockerfile 构建 `payment / manager / merchant`,不再错误指向根目录不存在的 Dockerfile。
- 如需回退到 ActiveMQ 或切换 RabbitMQ,需要同时调整 `docker-compose.yml``conf/*.yml` 中对应 MQ 配置。
- 若前端镜像构建失败,优先检查 `jeepay-ui` 是否存在,以及 Node 依赖是否可正常安装。
| 平台 | 地址 | 用户名 | 密码 |
|---|---|---|---|
| 运营平台 | http://localhost:9227 | jeepay | jeepay123 |
| 商户系统 | http://localhost:9228 | jeepay | jeepay123 |
### 核心组件版本
| 组件 | 版本 | 说明 |
|---|---|---|
| RocketMQ Server | `5.3.1` | NameServer + Broker |
| rocketmq-spring-boot-starter | `2.3.5` | Spring Boot 集成,内置 client 5.3.2 |
| MySQL | `8` | |
| Redis | `latest` | |
| Java 基础镜像 | `eclipse-temurin:17-jre` | openjdk 官方镜像已停止维护 |
### 配置说明
- Compose 默认使用 **RocketMQ** 作为消息队列,已配置 `rocketmq-namesrv``rocketmq-broker`
- `conf/payment``conf/manager``conf/merchant` 已默认切换为 `rocketMQ`MySQL / Redis 主机名配置为容器内网名 `mysql``redis`
- MySQL 映射为 `13306:3306`,避免与宿主机本地 MySQL 冲突;容器内部服务仍通过 `mysql:3306` 通信。
- Java 服务的配置文件通过 volume 挂载,修改 `conf/` 目录下的 yml 后重启对应服务即可生效。
- 如需回退到 ActiveMQ 或切换 RabbitMQ,需同时调整 `docker-compose.yml``conf/*.yml`
### 启动后验证
```bash
# 查看所有容器状态
docker compose ps
# 查看核心服务日志
docker compose logs --tail=100 payment manager merchant rocketmq-namesrv rocketmq-broker
# 确认 RocketMQ Broker 启动成功(应看到 "boot success"
docker logs jeepay-rocketmq-broker 2>&1 | grep "boot success"
```
### 常见问题
#### RocketMQ Broker 启动失败(NullPointerException
如果 Broker 日志中出现 `ScheduleMessageService.configFilePath` 相关 NPE,通常是 Docker named volume 的权限问题。RocketMQ 5.x 镜像以 `rocketmq`uid=3000)用户运行,而 Docker 创建的 volume 默认 `root` 权限。
Compose 中已通过 `user: "0:0"` 解决此问题。如果手动部署遇到此问题,可执行:
```bash
docker run --rm -u root -v jeepay_rocketmq_broker_store:/data alpine chown -R 3000:3000 /data
docker run --rm -u root -v jeepay_rocketmq_broker_logs:/data alpine chown -R 3000:3000 /data
```
#### Apple SiliconM1/M2/M3)注意事项
RocketMQ 官方镜像仅提供 `linux/amd64` 版本,在 Apple Silicon 上通过 Rosetta 2 模拟运行,启动较慢属于正常现象。确保 Docker Desktop 已开启 "Use Rosetta for x86_64/amd64 emulation on Apple Silicon"。
#### 前端镜像构建失败
优先检查:
- `jeepay-ui` 目录是否存在且在正确位置
- Node.js 依赖是否可正常安装(npm 源是否可达)
#### 登录提示"认证服务出现异常"
检查 `conf/*/application.yml` 中的数据库连接配置是否与 `docker-compose.yml` 中的 MySQL 密码一致。Compose 默认 root 密码为 `rootroot`
#### 镜像拉取失败(403 Forbidden
镜像加速源可能失效,建议配置多个加速源(参见上方"配置 Docker 国内镜像加速"),Docker 会自动尝试下一个。
---
+10 -1
View File
@@ -5,6 +5,8 @@ server:
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring:
application:
name: jeepay
main:
allow-circular-references: true
servlet:
@@ -123,5 +125,12 @@ isys:
access-key-secret: SECRET_SECRET_SECRET #AccessKeySecret
mq:
vender: activeMQ # 切换MQ厂商, 支持:【 activeMQ rabbitMQ rocketMQ aliYunRocketMQ 】, 需正确配置 【对应的yml参数】 和 【jeepay-components-mq项目下pom.xml中的依赖包】。
vender: rocketMQ # 切换MQ厂商, 支持:【 activeMQ rabbitMQ rocketMQ aliYunRocketMQ 】, 需正确配置 【对应的yml参数】 和 【jeepay-components-mq项目下pom.xml中的依赖包】。
rocketmq:
name-server: 127.0.0.1:9876
producer:
group: PID_JEEPAY_DEV
send-message-timeout: 10000
retry-times-when-send-failed: 2
retry-times-when-send-async-failed: 2
+7 -3
View File
@@ -14,6 +14,8 @@ server:
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring:
application:
name: jeepay-manager
servlet:
multipart:
enabled: true #是否启用http上传处理
@@ -32,7 +34,7 @@ spring:
# yml填写url连接串, 无需将&符号进行转义
url: jdbc:mysql://mysql:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: jeepaydb123456
password: rootroot
druid:
# 连接池配置项
initial-size: 5 #初始化时建立物理连接的个数
@@ -153,5 +155,7 @@ isys:
rocketmq:
name-server: rocketmq-namesrv:9876
producer:
group: JEEPAY-GROUP
group: PID_JEEPAY_MANAGER
send-message-timeout: 10000
retry-times-when-send-failed: 2
retry-times-when-send-async-failed: 2
+7 -3
View File
@@ -14,6 +14,8 @@ server:
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring:
application:
name: jeepay-merchant
servlet:
multipart:
enabled: true #是否启用http上传处理
@@ -32,7 +34,7 @@ spring:
# yml填写url连接串, 无需将&符号进行转义
url: jdbc:mysql://mysql:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: jeepaydb123456
password: rootroot
druid:
# 连接池配置项
initial-size: 5 #初始化时建立物理连接的个数
@@ -153,5 +155,7 @@ isys:
rocketmq:
name-server: rocketmq-namesrv:9876
producer:
group: JEEPAY-GROUP
group: PID_JEEPAY_MERCHANT
send-message-timeout: 10000
retry-times-when-send-failed: 2
retry-times-when-send-async-failed: 2
+7 -3
View File
@@ -14,6 +14,8 @@ server:
servlet:
context-path: / #设置应用的目录. 前缀需要带/, 无需设置后缀, 示例 【 /xxx 】 or 【 / 】
spring:
application:
name: jeepay-payment
servlet:
multipart:
enabled: true #是否启用http上传处理
@@ -32,7 +34,7 @@ spring:
# yml填写url连接串, 无需将&符号进行转义
url: jdbc:mysql://mysql:3306/jeepaydb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: jeepaydb123456
password: rootroot
druid:
# 连接池配置项
initial-size: 5 #初始化时建立物理连接的个数
@@ -156,5 +158,7 @@ isys:
rocketmq:
name-server: rocketmq-namesrv:9876
producer:
group: JEEPAY-GROUP
group: PID_JEEPAY_PAYMENT
send-message-timeout: 10000
retry-times-when-send-failed: 2
retry-times-when-send-async-failed: 2
+49 -15
View File
@@ -20,7 +20,13 @@ services:
MYSQL_USER: "jeepay"
MYSQL_PASSWORD: "jeepay"
ports:
- "3306:3306"
- "13306:3306"
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 20s
volumes:
- mysql:/var/lib/mysql
- ./docs/sql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
@@ -30,13 +36,24 @@ services:
# 使用 RocketMQ 作为默认 MQ 方案
rocketmq-namesrv:
image: apache/rocketmq:4.9.8
image: apache/rocketmq:5.3.1
hostname: rocketmq-namesrv
container_name: jeepay-rocketmq-namesrv
restart: always
user: "0:0"
ports:
- "9876:9876"
environment:
# 开发环境降低 NameServer 内存占用
HEAP_OPTS: "-Xms256m -Xmx256m -Xmn128m"
command: sh mqnamesrv
healthcheck:
# arm64 模拟 amd64 时 bash 启动较慢,需增大超时
test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/localhost/9876'"]
interval: 15s
timeout: 15s
retries: 10
start_period: 40s
volumes:
- rocketmq_namesrv_logs:/home/rocketmq/logs
networks:
@@ -44,23 +61,25 @@ services:
ipv4_address: 172.20.0.11
rocketmq-broker:
image: apache/rocketmq:4.9.8
image: apache/rocketmq:5.3.1
hostname: rocketmq-broker
container_name: jeepay-rocketmq-broker
restart: always
# Docker 创建的 named volume 默认 root 权限,而镜像以 rocketmq(uid=3000) 运行,需要提权
user: "0:0"
ports:
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
NAMESRV_ADDR: rocketmq-namesrv:9876
command: sh mqbroker -n rocketmq-namesrv:9876 -c /home/rocketmq/rocketmq-4.9.8/conf/broker.conf
command: sh mqbroker -n rocketmq-namesrv:9876
depends_on:
- rocketmq-namesrv
rocketmq-namesrv:
condition: service_healthy
volumes:
- rocketmq_broker_logs:/home/rocketmq/logs
- rocketmq_broker_store:/home/rocketmq/store
- ./docker/rocketmq/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.9.8/conf/broker.conf:ro
networks:
jeepay:
ipv4_address: 172.20.0.13
@@ -115,6 +134,12 @@ services:
image: redis:latest
ports:
- "6380:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 12
start_period: 10s
volumes:
- redis:/data
networks:
@@ -132,9 +157,12 @@ services:
ports:
- "9216:9216"
depends_on:
- mysql
- redis
- rocketmq-broker
mysql:
condition: service_healthy
redis:
condition: service_healthy
rocketmq-broker:
condition: service_started
volumes:
- ./logs/payment:/jeepayhomes/service/logs
- ./conf/payment/application.yml:/jeepayhomes/service/app/application.yml
@@ -153,9 +181,12 @@ services:
ports:
- "9217:9217"
depends_on:
- mysql
- redis
- rocketmq-broker
mysql:
condition: service_healthy
redis:
condition: service_healthy
rocketmq-broker:
condition: service_started
volumes:
- ./logs/manager:/jeepayhomes/service/logs
- ./conf/manager/application.yml:/jeepayhomes/service/app/application.yml
@@ -174,9 +205,12 @@ services:
ports:
- "9218:9218"
depends_on:
- mysql
- redis
- rocketmq-broker
mysql:
condition: service_healthy
redis:
condition: service_healthy
rocketmq-broker:
condition: service_started
volumes:
- ./logs/merchant:/jeepayhomes/service/logs
- ./conf/merchant/application.yml:/jeepayhomes/service/app/application.yml
+17 -7
View File
@@ -1,7 +1,17 @@
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=172.20.0.13
namesrvAddr=rocketmq-namesrv:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/store/commitlog
storePathConsumeQueue=/home/rocketmq/store/consumequeue
storePathIndex=/home/rocketmq/store/index
storeCheckpoint=/home/rocketmq/store/checkpoint
abortFile=/home/rocketmq/store/abort
+13 -1
View File
@@ -53,10 +53,16 @@
</dependency>
<!-- RocketMQ -->
<!-- Docker/独立部署场景需要将 RocketMQ Spring 依赖实际打包进最终产物,
否则运行时会缺少 org.apache.rocketmq.spring.core.RocketMQListener 等类。 -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
</dependency>
<!-- AliyunRocketMQ -->
@@ -66,6 +72,12 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- ↑↑↑↑↑↑ MQ依赖包 ↑↑↑↑↑↑ -->
</dependencies>
@@ -0,0 +1,44 @@
package com.jeequan.jeepay.components.mq.vender.rocketmq.config;
import com.jeequan.jeepay.components.mq.constant.MQVenderCS;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@Configuration
@ConditionalOnClass(RocketMQTemplate.class)
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
public class JeepayRocketMqAutoConfiguration {
private static final Logger log = LoggerFactory.getLogger(JeepayRocketMqAutoConfiguration.class);
@Bean
public SmartInitializingSingleton jeepayRocketMqSanityCheck(Environment environment) {
return () -> {
String nameServer = environment.getProperty("rocketmq.name-server");
String applicationName = environment.getProperty("spring.application.name");
String producerGroup = environment.getProperty("rocketmq.producer.group");
Assert.hasText(nameServer,
"When isys.mq.vender=rocketMQ, property 'rocketmq.name-server' must be configured.");
Assert.hasText(producerGroup,
"When isys.mq.vender=rocketMQ, property 'rocketmq.producer.group' must be configured.");
if (!StringUtils.hasText(applicationName)) {
log.warn("spring.application.name is empty, RocketMQ consumer groups will use fallback naming.");
return;
}
log.info("RocketMQ integration enabled. applicationName={}, nameServer={}, producerGroup={}",
applicationName, nameServer, producerGroup);
};
}
}
@@ -0,0 +1,60 @@
package com.jeequan.jeepay.components.mq.vender.rocketmq.config;
import com.jeequan.jeepay.components.mq.constant.MQVenderCS;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.util.StringUtils;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
/**
* Populate production-safe RocketMQ defaults before RocketMQAutoConfiguration runs.
*/
public class JeepayRocketMqEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {
private static final String PROPERTY_SOURCE_NAME = "jeepayRocketMqDefaults";
private static final String APPLICATION_NAME_KEY = "spring.application.name";
private static final String PRODUCER_GROUP_KEY = "rocketmq.producer.group";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (!MQVenderCS.ROCKET_MQ.equals(environment.getProperty(MQVenderCS.YML_VENDER_KEY))) {
return;
}
Map<String, Object> defaults = new LinkedHashMap<>();
String applicationName = environment.getProperty(APPLICATION_NAME_KEY);
if (!StringUtils.hasText(applicationName)) {
applicationName = "jeepay";
defaults.put(APPLICATION_NAME_KEY, applicationName);
}
if (!StringUtils.hasText(environment.getProperty(PRODUCER_GROUP_KEY))) {
defaults.put(PRODUCER_GROUP_KEY, buildProducerGroup(applicationName));
}
defaults.putIfAbsent("rocketmq.producer.send-message-timeout", "10000");
defaults.putIfAbsent("rocketmq.producer.retry-times-when-send-failed", "2");
defaults.putIfAbsent("rocketmq.producer.retry-times-when-send-async-failed", "2");
if (!defaults.isEmpty()) {
environment.getPropertySources().addLast(new MapPropertySource(PROPERTY_SOURCE_NAME, defaults));
}
}
static String buildProducerGroup(String applicationName) {
String normalized = applicationName.toUpperCase(Locale.ROOT).replaceAll("[^A-Z0-9]+", "_");
return "PID_JEEPAY_" + normalized;
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
@@ -36,7 +36,8 @@ import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
@ConditionalOnBean(CleanMchLoginAuthCacheMQ.IMQReceiver.class)
@RocketMQMessageListener(topic = CleanMchLoginAuthCacheMQ.MQ_NAME, consumerGroup = CleanMchLoginAuthCacheMQ.MQ_NAME)
@RocketMQMessageListener(topic = CleanMchLoginAuthCacheMQ.MQ_NAME,
consumerGroup = "${spring.application.name:jeepay}_" + CleanMchLoginAuthCacheMQ.MQ_NAME)
public class CleanMchLoginAuthCacheRocketMQReceiver implements IMQMsgReceiver, RocketMQListener<String> {
@Autowired
@@ -37,7 +37,8 @@ import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
@ConditionalOnBean(PayOrderDivisionMQ.IMQReceiver.class)
@RocketMQMessageListener(topic = PayOrderDivisionMQ.MQ_NAME, consumerGroup = PayOrderDivisionMQ.MQ_NAME)
@RocketMQMessageListener(topic = PayOrderDivisionMQ.MQ_NAME,
consumerGroup = "${spring.application.name:jeepay}_" + PayOrderDivisionMQ.MQ_NAME)
public class PayOrderDivisionRocketMQReceiver implements IMQMsgReceiver, RocketMQListener<String> {
@Autowired
@@ -38,7 +38,8 @@ import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
@ConditionalOnBean(PayOrderMchNotifyMQ.IMQReceiver.class)
@RocketMQMessageListener(topic = PayOrderMchNotifyMQ.MQ_NAME, consumerGroup = PayOrderMchNotifyMQ.MQ_NAME)
@RocketMQMessageListener(topic = PayOrderMchNotifyMQ.MQ_NAME,
consumerGroup = "${spring.application.name:jeepay}_" + PayOrderMchNotifyMQ.MQ_NAME)
public class PayOrderMchNotifyRocketMQReceiver implements IMQMsgReceiver, RocketMQListener<String> {
@Autowired
@@ -38,7 +38,8 @@ import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
@ConditionalOnBean(PayOrderReissueMQ.IMQReceiver.class)
@RocketMQMessageListener(topic = PayOrderReissueMQ.MQ_NAME, consumerGroup = PayOrderReissueMQ.MQ_NAME)
@RocketMQMessageListener(topic = PayOrderReissueMQ.MQ_NAME,
consumerGroup = "${spring.application.name:jeepay}_" + PayOrderReissueMQ.MQ_NAME)
public class PayOrderReissueRocketMQReceiver implements IMQMsgReceiver, RocketMQListener<String> {
@Autowired
@@ -37,7 +37,9 @@ import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
@ConditionalOnBean(ResetAppConfigMQ.IMQReceiver.class)
@RocketMQMessageListener(topic = ResetAppConfigMQ.MQ_NAME, consumerGroup = ResetAppConfigMQ.MQ_NAME, messageModel = MessageModel.BROADCASTING)
@RocketMQMessageListener(topic = ResetAppConfigMQ.MQ_NAME,
consumerGroup = "${spring.application.name:jeepay}_" + ResetAppConfigMQ.MQ_NAME,
messageModel = MessageModel.BROADCASTING)
public class ResetAppConfigRocketMQReceiver implements IMQMsgReceiver, RocketMQListener<String> {
@Autowired
@@ -37,7 +37,9 @@ import org.springframework.stereotype.Component;
@Component
@ConditionalOnProperty(name = MQVenderCS.YML_VENDER_KEY, havingValue = MQVenderCS.ROCKET_MQ)
@ConditionalOnBean(ResetIsvMchAppInfoConfigMQ.IMQReceiver.class)
@RocketMQMessageListener(topic = ResetIsvMchAppInfoConfigMQ.MQ_NAME, consumerGroup = ResetIsvMchAppInfoConfigMQ.MQ_NAME, messageModel = MessageModel.BROADCASTING)
@RocketMQMessageListener(topic = ResetIsvMchAppInfoConfigMQ.MQ_NAME,
consumerGroup = "${spring.application.name:jeepay}_" + ResetIsvMchAppInfoConfigMQ.MQ_NAME,
messageModel = MessageModel.BROADCASTING)
public class ResetIsvMchAppInfoRocketMQReceiver implements IMQMsgReceiver, RocketMQListener<String> {
@Autowired
@@ -0,0 +1,2 @@
org.springframework.boot.env.EnvironmentPostProcessor=\
com.jeequan.jeepay.components.mq.vender.rocketmq.config.JeepayRocketMqEnvironmentPostProcessor
+2 -2
View File
@@ -4,8 +4,8 @@
# ------ START ------
# 基础镜像来自: https://hub.docker.com/ 官方OFFICIAL
FROM openjdk:17
# Eclipse Temurin JRE 17openjdk 官方镜像已停止维护)
FROM eclipse-temurin:17-jre
MAINTAINER Terrfly
@@ -2,6 +2,8 @@ server:
port: 9217 #设置端口
spring:
application:
name: jeepay-manager
data:
redis:
database: 1 #1库:运营平台 #2库:商户系统 #3库:支付网关
+2 -2
View File
@@ -4,8 +4,8 @@
# ------ START ------
# 基础镜像来自: https://hub.docker.com/ 官方OFFICIAL
FROM openjdk:17
# Eclipse Temurin JRE 17openjdk 官方镜像已停止维护)
FROM eclipse-temurin:17-jre
MAINTAINER Terrfly
@@ -2,6 +2,8 @@ server:
port: 9218 #设置端口
spring:
application:
name: jeepay-merchant
data:
redis:
database: 2 #1库:运营平台 #2库:商户系统 #3库:支付网关
+2 -2
View File
@@ -4,8 +4,8 @@
# ------ START ------
# 基础镜像来自: https://hub.docker.com/ 官方OFFICIAL
FROM openjdk:17
# Eclipse Temurin JRE 17openjdk 官方镜像已停止维护)
FROM eclipse-temurin:17-jre
MAINTAINER Terrfly
@@ -2,6 +2,8 @@ server:
port: 9216 #设置端口
spring:
application:
name: jeepay-payment
data:
redis:
database: 3 #1库:运营平台 #2库:商户系统 #3库:支付网关