异步消息传递与无服务器处理系统解析
1. 异步消息传递的关键特性
1.1 故障处理与动态负载均衡
在异步消息传递系统中,若消费者出现故障,未确认的消息会被传递给其他队列消费者。同时,系统支持动态负载均衡,在高负载时可启动新的消费者,负载降低时停止,无需更改队列或消费者配置。竞争消费者模式在生产级消息平台中很常见,是扩展单队列消息处理能力的有效方式。
1.2 精确一次处理
由于瞬态网络故障和延迟响应,客户端可能会重新发送消息,导致服务器收到重复消息。为解决此问题,需要确保幂等处理。在异步消息系统中,重复消息处理有两个来源:
- 发布者重复 :发布者在未收到消息代理的确认时重试消息发送,若原消息已被接收但确认丢失或延迟,可能导致队列中出现重复消息。部分消息代理支持重复检测,如 ActiveMQ Artemis 可去除发布者发送到代理的重复消息。发布者只需为每条消息设置一个唯一的幂等键值,示例代码如下:
ClientMessage msg = session.createMessage(true);
UUID idKey = UUID.randomUUID(); // use as idempotence key
msg.setStringProperty(HDR_DUPLICATE_DETECTION_ID, idKey.toString() );
- 消费者重复处理 :当代理将消息传递给消费者,消费者处理后未能发送确认(如消费者崩溃或网络丢失确
超级会员免费看
订阅专栏 解锁全文
8万+

被折叠的 条评论
为什么被折叠?



