# 2026-04-09 工作记录 ## UserServiceImpl 添加 MQ 同步功能 在 `UserServiceImpl` 中统一添加了用户数据变更时的 MQ 消息发送逻辑: ### 修改内容 1. **添加依赖注入**:注入 `SyncMessageProducer`,使用 `@Autowired(required = false)` 避免 MQ 未启用时报错 2. **saveUser() 方法**:用户创建成功后发送 `CREATE` 事件到 websopy 3. **updateUser() 方法**:用户更新成功后发送 `UPDATE` 事件到 websopy 4. **addUser() 方法**:注释说明已通过 saveUser 发送 MQ,避免重复 ### 触发场景 现在以下操作都会触发 MQ 同步: - 用户注册(短信登录自动注册、普通注册、管理员注册) - 后台添加用户 - 用户更新信息 - 扫码绑定手机号(原有逻辑) ### 日志输出 - 创建:`用户创建后发送MQ消息同步到websopy: userId={}, phone={}` - 更新:`用户更新后发送MQ消息同步到websopy: userId={}, phone={}` --- ## MQ 架构改造 - 方案 A 实现 将用户同步架构从 "core 系统消费后 HTTP 转发" 改为 "各子系统直接消费 MQ"。 ### core 系统改动 (com.gxwebsoft.core) #### 1. RabbitMQConfig.java - **Exchange 类型**:从 `DirectExchange` 改为 `TopicExchange` - **删除队列定义**:core 系统不再定义消费队列,只负责发送 - **Routing Key 格式**:`user.sync.{targetSystem}` #### 2. RabbitMQSyncProducer.java - **动态 Routing Key**:根据 `targetSystem` 构建 routing key - **代码**:`"user.sync." + targetSystem.toLowerCase()` #### 3. 删除 UserSyncConsumer.java - core 系统不再消费用户同步消息 #### 4. UserSyncService.java - **废弃 HTTP 同步逻辑**:所有 HTTP 调用方法已删除 - **标记 @Deprecated**:保留空实现以兼容旧代码 - **同步方式**:现在统一通过 MQ 自动触发 ### websopy 系统改动 (websopy-java) #### 1. RabbitMQConfig.java ```java // websopy 专用队列 public static final String SYNC_QUEUE_WEBSOPY = "user.sync.websopy.queue"; public static final String SYNC_ROUTING_KEY_WEBSOPY = "user.sync.websopy"; // Topic Exchange(与 core 系统共用) @Bean public TopicExchange syncExchange() { return new TopicExchange(SYNC_EXCHANGE, true, false); } // websopy 专用队列绑定 @Bean public Binding syncBindingWebsopy() { return BindingBuilder.bind(syncQueueWebsopy()) .to(syncExchange()) .with(SYNC_ROUTING_KEY_WEBSOPY); } ``` #### 2. SyncMessageConsumer.java - **监听队列**:改为 `SYNC_QUEUE_WEBSOPY` (`user.sync.websopy.queue`) - **死信队列**:改为 `DLQ_QUEUE_WEBSOPY` (`user.sync.websopy.dlq`) ### 新架构流程 ``` 用户操作 → UserServiceImpl.saveUser/updateUser ↓ MQ Producer (routing key = user.sync.websopy) ↓ Topic Exchange (sync.exchange) ↓ ┌───────────┼───────────┐ ↓ ↓ ↓ websopy 子系统B 子系统C (消费者) (消费者) (消费者) ``` ### 消息格式 ```json { "messageId": "uuid", "messageType": "USER_SYNC", "eventType": "CREATE|UPDATE|DELETE", "targetSystem": "websopy", "data": { "userId": 123, "username": "xxx", "nickname": "xxx", "avatar": "xxx", "phone": "xxx", "status": 1, "tenantId": 1 }, "createTime": "2026-04-09T16:00:00", "retryCount": 0 } ``` ### 优势 - **解耦**:core 系统只负责发送,不关心哪些子系统消费 - **扩展性**:新增子系统只需添加自己的消费者,无需修改 core - **可靠性**:各子系统独立消费,互不影响 - **符合 MQ 设计**:消息广播到多个订阅者