复制 :headding-anchor:replication
Adobe Experience Manager as a Cloud Service使用Sling内容分发功能将内容移动到要复制到在AEM运行时以外的Adobe Developer上运行的管道服务。
发布内容的方法 :headding-anchor:methods-of-publishing-content
此工作流步骤是专为Cloud Service构建的,可有效处理大型负载。
不建议自行构建批量发布自定义代码。
如果您必须出于任何原因进行自定义,则可以使用现有工作流API触发此工作流/工作流步骤。
始终最好是仅发布必须发布的内容。 此外,如果不需要的话,对于不尝试发布大量内容也要谨慎。 但是,您可以通过Publish内容树工作流发送的内容数量没有限制。
快速取消/发布 – 计划取消/发布 :headding-anchor:publish-unpublish
此功能允许您立即发布选定的页面,而无需通过“管理发布”方法选择其他选项。
有关更多信息,请参阅管理发布。
开启和关闭时间 – 触发器配置 :headding-anchor:on-and-off-times-trigger-configuration
开始时间 和 关闭时间 的附加可能性可从页面属性的“基本”选项卡获得。
若要实现此功能的自动复制,请在OSGi配置 开启关闭触发器配置 中启用 自动复制:
管理发布 :headding-anchor:manage-publication
与快速Publish相比,管理发布提供了更多选项,允许包含子页面、自定义引用和启动任何适用的工作流,并且还提供了以后发布的选项。
为“稍后发布”选项包含文件夹的子项会调用Publish内容树工作流,如本文所述。
您可以在出版基础文档中找到有关管理出版的更多详细信息。
发布内容树工作流程 :headding-anchor:publish-content-tree-workflow
您可以通过选择 工具 – 工作流 – 模型 和复制 发布内容树 现成的工作流模型,如下所示:
请勿调用原始模型。 相反,请确保首先复制模型并调用该副本。
与所有工作流一样,也可以通过 API 调用。 有关详细信息,请参阅以编程方式与工作流交互。
或者,您也可以创建使用Publish Content Tree
进程步骤的工作流模型:
-
从AEM as a Cloud Service主页,转到 工具 — 工作流 — 模型。
-
在“工作流模型”页面中,按屏幕右上角的 创建。
-
为模型添加标题和名称。 有关详细信息,请参阅创建工作流模型。
-
从列表中选择已创建的模型,然后按 编辑
-
在以下窗口中,将“流程步骤”拖放到当前模型流中:
-
选择流中的“流程”步骤,然后按扳手图标选择 配置。
-
选择 进程 选项卡并从下拉列表中选择
Publish Content Tree
,然后选中 处理程序前进 复选框 -
在 参数 字段中设置任何附加参数。 可以将多个以逗号分隔的参数字符串在一起。 例如:
enableVersion=true,agentId=publish,includeChildren=true
note note NOTE 有关参数列表,请参阅 参数 部分。 -
按 完成 以保存工作流模型。
参数
-
includeChildren
(布尔值,默认:false
)。 值false
表示仅发布路径;true
表示子项也发布。 -
replicateAsParticipant
(布尔值,默认:false
)。 如果配置为true
,则复制操作将使用userid
执行参与者步骤的主体。 -
enableVersion
(布尔值,默认:false
)。 此参数可确定复制时是否创建了新版本。 -
agentId
(字符串值,默认表示仅使用发布代理)。 建议明确说明 agentId;例如,将其设置为值:发布。 正在将代理设置为preview
发布到预览服务。 -
filters
(字符串值,默认表示激活所有路径)。 可用值包括:onlyActivated
— 仅激活已(已)激活的页面。 作为重新激活的一种形式。onlyModified
– 仅激活已激活且修改日期晚于激活日期的路径。- 上面可以用管道字符“|”进行“或”操作。 例如:
onlyActivated|onlyModified
。
记录
当树激活工作流步骤启动时,它将在“信息”日志级别记录其配置参数。 激活路径时,也会记录 INFO 语句。
在工作流步骤复制了所有路径之后,将记录最终的INFO语句。
此外,您还可以将低于com.day.cq.wcm.workflow.process.impl
的记录器的日志级别增加到DEBUG/TRACE以获取更多日志信息。
如果存在错误,工作流步骤将以WorkflowException
终止,它封装了基础异常。
以下是在示例发布内容树工作流中生成的日志示例:
21.04.2021 19:14:55.566 [cm-p123-e456-aem-author-797aaaf-wkkqt] *INFO* [JobHandler: /var/workflow/instances/server60/2021-04-20/brian-tree-replication-test-2_1:/content/wknd/us/en/adventures] com.day.cq.wcm.workflow.process.impl.treeactivation.TreeActivationWorkflowProcess TreeActivation options: replicateAsParticipant=false(userid=workflow-process-service), agentId=publish, chunkSize=100, filter=, enableVersion=false
21.04.2021 19:14:58.541 [cm-p123-e456-aem-author-797aaaf-wkkqt] *INFO* [JobHandler: /var/workflow/instances/server60/2021-04-20/brian-tree-replication-test-2_1:/content/wknd/us/en/adventures] com.day.cq.wcm.workflow.process.impl.ChunkedReplicator closing chunkedReplication-VolatileWorkItem_node1_var_workflow_instances_server60_2021-04-20_brian-tree-replication-test-2_1, 17 paths replicated in 2971 ms
恢复支持
该工作流会按块处理内容,每个块表示要发布的完整内容的子集。 如果系统停止了工作流,它将重新启动并处理尚未处理的块。 日志语句声明内容已从特定路径恢复。
复制 API :headding-anchor: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 more than 1 resource at once, this approach is more performant
Map<String,ReplicationStatus> allStatus = replicationStatusProvider.getBatchReplicationStatus(enResource,deResource);
使用特定代理进行复制
如上面的示例所示,在复制资源时,将只使用默认处于活动状态的代理。 在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
如果您没有提供此类过滤器,并且只使用“发布”代理,则不使用“预览”代理,并且复制操作不会影响预览层。
仅当复制操作包括至少一个默认处于活动状态的代理时,才会修改资源的整体ReplicationStatus
。 在上面的示例中,此流不是这种情况。 复制只是使用“预览”代理。 因此,您必须使用新的getStatusForAgent()
方法,该方法允许查询特定代理的状态。 此方法也适用于“发布”代理。 如果已使用提供的代理完成任何复制操作,则返回非空值。
使内容失效的方法 :headding-anchor:invalidating-content
您可以直接使内容失效,方法是使用作者的Sling内容失效(SCD)(首选方法),或使用复制API调用发布Dispatcher Flush复制代理。 有关更多详细信息,请参阅缓存页面。
复制 API 容量限制
一次复制不到100个路径,以500为限制。 超出限制,将引发ReplicationException
。
如果您的应用程序逻辑不需要原子复制,则可以通过将ReplicationOptions.setUseAtomicCalls
设置为false(它接受任意数量的路径,但在内部创建存储段以保持在此限制以下)来克服此限制。
每次复制调用传输的内容大小不得超过 10 MB
。 此规则包括节点和属性,但不包括任何二进制文件(工作流包和内容包被视为二进制文件)。
疑难解答 :headding-anchor:troubleshooting
要对复制问题进行故障诊断,请导航到 AEM 创作服务 Web UI 中的复制队列:
-
从AEM“开始”菜单中,导航到 工具 > 部署 > 分发
-
选择 发布 卡
-
检查应为绿色的队列状态
-
您可以测试与复制服务的连接
-
选择 日志 选项卡,其中显示了内容发布的历史记录
如果内容无法发布,则整个发布将从AEM Publish服务中恢复。
在这种情况下,可编辑的主队列将显示红色状态,应该进行审查以确定哪些项目导致取消发布。 通过单击该队列,将显示其待处理项目,如果需要,可从中清除单个项目或所有项目。