用途
Sling Distribution 是 AEM Cloud Service 中内容复制的底层传输机制。当使用 Replication API(Replicator.replicate())时,Sling Distribution 负责包创建、排队、传输到 Adobe Developer pipeline 服务,以及在目标层导入并应用内容。本技能用于监控并响应内容分发生命周期事件,适合以下场景:
- 监控分发生命周期:跟踪包的创建、排队与投递
- 自定义分发后动作:缓存预热、通知、分析
- 分发审计:记录并跟踪所有分发事件
- 失败处理:响应被丢弃的包与分发失败
- 集成工作流:在分发成功后触发外部系统
若需以编程方式发布内容,应改用 Replication API。
架构流程
Replication API 调用后,事件依次触发:
- AGENT_PACKAGE_CREATED:包已组装
- AGENT_PACKAGE_QUEUED:包已加入队列
- AGENT_PACKAGE_DISTRIBUTED:包已发送至 pipeline
- IMPORTER_PACKAGE_IMPORTED:包已在目标层导入
或:
- AGENT_PACKAGE_DROPPED:包失败并被移除
分发事件主题
Sling Distribution 在分发生命周期的每个阶段触发事件:
- AGENT_PACKAGE_CREATED:包创建后触发,用于跟踪正在发布的内容
- AGENT_PACKAGE_QUEUED:包排队后触发,用于监控队列深度
- AGENT_PACKAGE_DISTRIBUTED:成功分发后触发,用于触发发布后动作
- AGENT_PACKAGE_DROPPED:包失败并被丢弃时触发,用于处理失败、告警值班人员
- IMPORTER_PACKAGE_IMPORTED:目标层成功导入后触发,用于确认内容已上线
事件主题常量位于 org.apache.sling.distribution.event.DistributionEventTopics。
事件属性
每个分发事件包含以下属性:
- DISTRIBUTION_COMPONENT_NAME(String):生成事件的组件名称
- DISTRIBUTION_COMPONENT_KIND(String):组件类型(agent、importer 等)
- DISTRIBUTION_TYPE(String):分发请求类型(ADD、DELETE 等)
- DISTRIBUTION_PACKAGE_ID(String):唯一包标识符
- DISTRIBUTION_PATHS(String[]):正在分发的内容路径
- DISTRIBUTION_DEEP_PATHS(String[]):深层路径(完整子树)
- DISTRIBUTION_ENQUEUE_TIMESTAMP(Long):入队时间(毫秒)
属性常量位于 org.apache.sling.distribution.event.DistributionEventProperties。
使用方式
通过实现 OSGi EventHandler 并声明对应的事件主题来监听分发事件。基本步骤:
- 创建实现 EventHandler 的组件,使用 @Component 注解并设置 EVENT_TOPIC 属性为一个或多个分发事件主题。
- 在 handleEvent(Event event) 方法中,通过 event.getTopic() 获取主题,通过 event.getProperty(...) 读取上述事件属性。
- 根据主题与属性执行自定义逻辑。
示例:基本分发事件日志记录器会监听全部五个主题,提取组件名称、类型、包 ID、路径与时间戳并记录日志。
常见用例
- 分发失败告警:仅监听 AGENT_PACKAGE_DROPPED,提取包 ID 与路径,记录错误并向运维团队发送告警。
- CDN 缓存预热:监听 IMPORTER_PACKAGE_IMPORTED,仅在分发类型为 ADD 时,将 JCR 路径转换为公开 URL 并请求以预热缓存。
- 分发分析追踪:监听创建、分发、丢弃主题,向分析服务上报包创建、分发耗时与失败等指标。
- 生产发布 Slack 通知:监听 IMPORTER_PACKAGE_IMPORTED,仅在运行模式包含 prod 且组件名为 publish 时,向指定频道发送发布消息。
- 全量分发事件审计日志:监听全部主题,在 /var/audit/distribution 下创建审计节点,记录主题、包 ID、路径与时间戳。
适用场景与限制
适用于 AEM Cloud Service 环境中需要监控内容分发生命周期、在分发各阶段触发自定义动作或集成外部系统的开发场景。资料中未提供关于收费、价格、平台支持范围、性能效果或具体安装命令的信息。官方 API 文档(Javadoc)地址为:https://developer.adobe.com/experience-manager/reference-materials/cloud-service/javadoc/org/apache/sling/distribution/package-summary.html。关键包包括 org.apache.sling.distribution(核心分发接口)、org.apache.sling.distribution.event(事件主题与属性)、org.apache.sling.distribution.queue(队列监控)。