复制 replication

Adobe Experience Manager as a Cloud Service使用Sling内容分发功能将内容移动到要复制到在AEM运行时以外的Adobe Developer上运行的管道服务。

NOTE
阅读分发以了解更多信息。

发布内容的方法 methods-of-publishing-content

NOTE
如果您有兴趣批量发布内容,请使用树激活工作流步骤创建工作流,以便有效地处理大型负载。
不建议自行构建批量发布自定义代码。
如果您必须出于任何原因进行自定义,则可以使用现有工作流API通过此步骤触发工作流。
始终最好是仅发布必须发布的内容。 如果不需要的话,谨慎不要尝试发布大量内容。 但是,使用树激活工作流步骤可以通过工作流发送的内容数量没有限制。

快速取消/发布 – 计划取消/发布 publish-unpublish

此功能允许您立即发布选定的页面,而无需通过“管理发布”方法选择其他选项。

有关更多信息,请参阅管理发布

开启和关闭时间 – 触发器配置 on-and-off-times-trigger-configuration

开始时间​和​ 关闭时间 ​的附加可能性可从页面属性的“基本”选项卡获得。

若要实现此功能的自动复制,请在OSGi配置 开启关闭触发器配置​中启用​自动复制

OSGi 开启关闭触发器配置

管理发布 manage-publication

与快速发布相比,管理发布提供了更多选项,允许包含子页面、自定义引用和启动任何适用的工作流,并且还提供了以后发布的选项。

为“稍后发布”选项包含文件夹的子项会调用“发布内容树”工作流,如树复制工作流中所述。

您可以在出版基础文档中找到有关管理出版的更多详细信息。

要批量复制深层内容层级,请使用基于工作流的方法。 有关建议的树激活工作流步骤、配置参数和监视指导,请参阅树复制工作流。 此处还记录了已弃用的发布内容树工作流以供参考。

复制 API replication-api

您可以使用 AEM as a Cloud Service 中提供的复制 API 发布内容。

有关详细信息,请参阅 API 文档

API 的基本用法

@Reference
Replicator replicator;
@Reference
ReplicationStatusProvider replicationStatusProvider;

....
Session session = ...
// Activate a single page to all agents, which are active by default
replicator.replicate(session,ReplicationActionType.ACTIVATE,"/content/we-retail/en");
// Activate multiple pages (but try to limit it to approx 100 at max)
replicator.replicate(session,ReplicationActionType.ACTIVATE, new String[]{"/content/we-retail/en","/content/we-retail/de"});

// ways to get the replication status
Resource enResource = resourceResolver.getResource("/content/we-retail/en");
Resource deResource = resourceResolver.getResource("/content/we-retail/de");
ReplicationStatus enStatus = enResource.adaptTo(ReplicationStatus.class);
// if you need to get the status for more than 1 resource at once, this approach is more performant
Map<String,ReplicationStatus> allStatus = replicationStatusProvider.getBatchReplicationStatus(enResource,deResource);

复制代理

AEM as a Cloud Service提供了两个预定义的复制代理,这些代理通过Sling Content Distribution将内容从创作层路由到目标层:

  • 发布 — 将激活的内容复制到实时发布层。 此代理默认启用,并在从UI、工作流或复制API发布时使用,除非另有指定。
  • 预览 — 将内容复制到预览层,以便作者在更改生效之前对其进行审阅。 默认情况下,此代理未启用。

您可以从​工具 > 部署 > 分发​查看和监视这两个代理:

分发代理显示发布和预览

选择代理信息卡会打开其状态、日志和队列详细信息

使用特定代理进行复制

使用如上所示的API复制时,仅使用默认启用的代理 — 在AEM as a Cloud Service中,即​发布。 要专门复制到预览层,请传递选择预览代理的AgentFilter

请参阅以下示例:

private static final String PREVIEW_AGENT = "preview";

ReplicationStatus beforeStatus = enResource.adaptTo(ReplicationStatus.class); // beforeStatus.isActivated == false

ReplicationOptions options = new ReplicationOptions();
options.setFilter(new AgentFilter() {
  @Override
  public boolean isIncluded (Agent agent) {
    return agent.getId().equals(PREVIEW_AGENT);
  }
});
// will replicate only to preview
replicator.replicate(session,ReplicationActionType.ACTIVATE,"/content/we-retail/en", options);

ReplicationStatus afterStatus = enResource.adaptTo(ReplicationStatus.class); // afterStatus.isActivated == false
ReplicationStatus previewStatus = afterStatus.getStatusForAgent(PREVIEW_AGENT); // previewStatus.isActivated == true

如果复制时没有AgentFilter,则仅使用​发布,并且预览层不受影响。

仅当复制包括至少一个默认启用的代理时,资源的整体ReplicationStatus才会更新。 在上述示例中,仅使用了​预览,因此ReplicationStatus.isActivated仍为false。 使用getStatusForAgent()检查特定代理的状态 — 例如,仅预览复制后的getStatusForAgent("preview"),或实时发布层的getStatusForAgent("publish")

使内容失效的方法 invalidating-content

您可以直接使内容失效,方法是使用作者的Sling内容失效(SCD)(首选方法),或使用复制API调用发布Dispatcher Flush复制代理。 有关更多详细信息,请参阅缓存页面。

复制API容量限制

一次复制不到100个路径,以500为限制。 超出限制,将引发ReplicationException
如果您的应用程序逻辑不需要原子复制,则可以通过将ReplicationOptions.setUseAtomicCalls设置为false来克服此限制,它接受任意数量的路径,但在内部创建存储段以保持在此限制以下。

每次复制调用传输的内容大小不得超过 10 MB。 此规则包括节点和属性,但不包括任何二进制文件(工作流包和内容包被视为二进制文件)。

复制队列 replication-queues

每个复制代理显示两个复制队列。 AEM as a Cloud Service不再为每个发布面板显示单独的队列 — 发布层会自动扩展,因此每个面板队列增加了复杂性,却没有实际好处。 队列状态合并如下:

  • 已保留 — 更改永久存储在发布层上。 项目清除此队列后,内容会持续存在;发布实例会随着时间的推移而达到一致状态。
  • 已完全发布 — 更改在所有发布pod上处于活动状态,并且受影响路径的Dispatcher缓存已被清除。 在项目清除此队列后,访客会收到更新的内容。

监视复制队列 monitor-replication-queues

  1. 从AEM 全局导航,导航到​工具 > 部署

    从工具导航到分发

  2. 选择​分发,然后打开​ 发布 ​或​ 预览 ​代理信息卡。

  3. 在​ 状态 ​选项卡上,验证每个队列是否显示正常状态。 查看​ 个待处理项目 ​以等待处理工作,查看​最近处理过的项目

    复制队列显示已保留和已完全发布

  4. 选择​ 测试连接 ​以验证代理是否可以访问分发服务。

  5. 选择​ 日志 ​选项卡以查看内容发布的历史记录。

    复制日志

疑难解答 troubleshooting

如果内容无法发布,将从AEM发布服务中还原发布。 使用监视复制队列打开代理​ 状态 ​选项卡并识别受影响的队列。

当队列显示红色状态时,查看其挂起项目以查找导致失败的原因。 选择要查看待定项目的队列,然后根据需要清除单个项目或整个队列。

recommendation-more-help
experience-manager-cloud-service-help-main-toc