Aeron重启Publisher应用后如何保留同一Recording?
解决方案
核心思路
放弃依赖系统自动生成的录制ID,改为绑定通道的固定录制ID,让Archive实例在检测到新流时优先续录已有未关闭的录制,而非新建。
具体实现步骤
自定义固定录制ID
为每个多播通道指定唯一且固定的录制ID,比如直接复用通道ID,或者采用规则化命名(如{channel_id}_persistent_backup)。所有Archive实例统一使用这个ID执行录制操作。修改流检测后的录制逻辑
当Archive检测到发送方的流时,不要直接调用startRecording(),而是按以下流程处理:- 调用Archive的录制查询接口(如
listRecordings()),筛选当前通道下状态为recording或paused的录制 - 如果存在符合条件的录制,直接调用
extendRecording({ recordingId: 固定ID }),将新流关联到已有录制,继续写入数据 - 如果不存在,再调用
startRecording({ channelId: 目标通道, recordingId: 固定ID, autoclose: false }),创建持久化录制
- 调用Archive的录制查询接口(如
解决
autoclose: false无效的问题
之前设置该参数无效果,是因为发送方重启后Archive每次都新建了录制,而新录制在发送方断开时会触发默认关闭逻辑。现在使用固定ID续录后,发送方断开时录制会进入paused状态而非关闭,发送方重启后即可通过extendRecording()恢复录制,autoclose: false的配置会正常生效。多Archive实例的一致性保障
- 所有服务器上的Archive实例共享同一个录制ID生成规则,确保同一通道的录制操作指向同一资源
- 若Archive服务不支持多实例同时写入同一个录制,可调整为每个实例使用独立的固定录制ID(如
{channel_id}_backup_{instance_id}),同样能满足备份需求
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

