一、核心需求拆解
1. 业务场景
- 订单状态变更(待发货→已发货)时自动触发提醒
- 支持多角色通知(批发商、物流方、零售商)
- 需包含关键信息:订单号、水果品类、数量、预计送达时间、物流单号
2. 技术要求
- 低延迟通知(建议<30秒)
- 高可用性(99.9%可用率)
- 多通道支持(短信/邮件/企业微信/钉钉)
二、万象源码部署方案
1. 架构设计
```mermaid
graph TD
A[订单系统] --> B[(消息队列RocketMQ)]
B --> C[发货提醒服务]
C --> D[短信网关]
C --> E[邮件服务]
C --> F[企业微信机器人]
C --> G[钉钉群机器人]
```
2. 关键组件实现
① 订单状态监听(Java示例)
```java
@RocketMQMessageListener(
topic = "ORDER_STATUS",
consumerGroup = "SHIPPING_NOTIFY_GROUP"
)
public class OrderStatusConsumer implements RocketMQListener
{
@Autowired
private NotificationService notificationService;
@Override
public void onMessage(OrderStatusEvent event) {
if ("SHIPPED".equals(event.getStatus())) {
notificationService.sendShippingNotice(event.getOrderId());
}
}
}
```
② 通知模板引擎(Thymeleaf示例)
```html
尊敬的${recipientName}:
订单 ${orderId}已发货:
- 水果品类:${fruitTypes}
- 数量:${quantity}箱
- 物流公司:${logisticsCompany}
- 单号:${trackingNumber}
- 预计送达:${estimatedDelivery}
```
③ 多通道通知实现(策略模式)
```java
public interface NotificationChannel {
void send(NotificationMessage message);
}
@Service
public class NotificationService {
@Autowired
private Map channels;
public void sendShippingNotice(Long orderId) {
Order order = orderRepository.findById(orderId);
NotificationMessage message = buildMessage(order);
// 根据配置发送多通道通知
Arrays.asList("sms", "email", "wecom").forEach(channel -> {
channels.get(channel).send(message);
});
}
}
```
三、部署优化建议
1. 性能优化
- 使用Redis缓存订单状态,减少数据库查询
- 异步化处理:通知发送与主业务解耦
- 批量发送:合并同一收件人的多条通知
2. 高可用设计
- 消息队列持久化配置
- 通知服务集群部署
- 失败重试机制(指数退避策略)
3. 监控告警
- Prometheus监控通知成功率
- 告警规则:
- 5分钟内通知失败率>5%
- 队列积压量>1000条
四、典型部署流程
1. 环境准备
```bash
示例:Docker部署RocketMQ
docker run -d -p 9876:9876 --name rmqnamesrv apache/rocketmq:5.1.3 sh mqnamesrv
docker run -d -p 10911:10911 -p 10909:10909 \
--name rmqbroker --link rmqnamesrv:namesrv \
-e "NAMESRV_ADDR=namesrv:9876" apache/rocketmq:5.1.3 sh mqbroker
```
2. 源码编译
```xml
org.apache.rocketmq
rocketmq-spring-boot-starter
2.2.2
```
3. 配置管理
```yaml
application.yml
notification:
channels:
sms:
enabled: true
api-key: ${SMS_API_KEY}
wecom:
webhook: ${WECOM_WEBHOOK_URL}
retry:
max-attempts: 3
initial-interval: 1000
```
五、扩展功能建议
1. 智能通知策略
- 工作时段(9:00-18:00)优先推送企业微信
- 非工作时段转为短信通知
- 紧急订单添加语音电话提醒
2. 数据闭环
- 通知送达状态回调
- 用户阅读状态追踪
- 通知效果分析看板
3. 国际化支持
```java
public class I18nMessageBuilder {
public String build(Locale locale, String templateId, Map params) {
// 根据locale加载不同语言模板
}
}
```
建议采用蓝绿部署方式逐步上线,先在小范围批发商群体中测试通知到达率和时效性,确认无误后再全量推广。对于日均订单量超过10万的系统,建议考虑使用消息队列的分片消费功能提升处理能力。