複製 replication
Adobe Experience Manager as a Cloud Service使用Sling內容發佈功能將內容移動至復寫至AEM執行階段以外的Adobe Developer上執行的管道服務。
發佈內容的方法 methods-of-publishing-content
此工作流程步驟是專為Cloud Service建置的,可有效處理大型負載。
不建議建置您自己的大量發佈自訂程式碼。
如果您因任何原因必須自訂,則可使用現有的工作流程API來觸發此工作流程/工作流程步驟。
只發佈必須發佈的內容永遠是好的做法。 如果不需要的話,也請謹慎行事,不要嘗試發佈大量內容。 不過,您可以透過Publish內容樹工作流程傳送的內容數量沒有限制。
快速取消/Publish — 計畫取消/Publish publish-unpublish
此功能可讓您立即發佈所選頁面,無需透過「管理發布」方法選擇其他選項。
如需詳細資訊,請參閱管理出版物。
開啟和關閉時間 — 觸發器設定 on-and-off-times-trigger-configuration
開啟時間 和 關閉時間 的其他可能性可從頁面屬性🔗的基本索引標籤取得。
若要實現此功能的自動復寫,請在OSGi設定 開啟關閉觸發程式設定 中啟用 自動復寫:
管理發佈 manage-publication
管理發布提供的選項比快速Publish更多,允許包含子頁面、自訂引用,以及啟動任何適用的工作流程,並提供稍後發佈的選項。
針對「稍後發佈」選項包含資料夾的子項時,會叫用Publish內容樹工作流程,如本文所述。
您可以在出版基礎檔案中找到有關管理出版的詳細資訊。
發佈內容樹狀工作流程 publish-content-tree-workflow
您可以選擇 工具 — 工作流程 — 模型 並複製 Publish內容樹狀結構 現成的工作流程模型,以觸發樹狀結構復寫,如下所示:
請勿叫用原始模型。 相反,請務必先複製模型並叫用該副本。
如同所有工作流程,您也可以透過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,例如設定值: publish。 正在將代理程式設定為preview
發佈到預覽服務。 -
filters
(字串值,預設值代表所有路徑都已啟動)。 可用的值包括:onlyActivated
— 僅啟動已(已)啟動的頁面。 作為重新啟用的一種形式。onlyModified
— 僅啟動已啟動且修改日期晚於啟動日期的路徑。- 以上可以用垂直號「|」進行「或」操作。 例如,
onlyActivated|onlyModified
。
記錄
樹狀結構啟動工作流程步驟啟動時,會在「資訊」記錄層級記錄其設定引數。 啟動路徑時,也會記錄INFO陳述式。
在工作流程步驟已複製所有路徑之後,會記錄最終的INFO陳述式。
此外,您也可以將記錄器的記錄層級增加至com.day.cq.wcm.workflow.process.impl
以下,以偵錯/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 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()
方法,允許查詢特定代理程式的狀態。 此方法也適用於「發佈」代理。 如果已使用提供的代理程式完成任何復寫動作,則會傳回非null值。
讓內容失效的方法 invalidating-content
您可以使用作者的Sling內容失效(SCD) (偏好方法)或使用復寫API叫用發佈Dispatcher Flush復寫代理程式,直接讓內容失效。 如需詳細資訊,請參閱快取頁面。
復寫API容量限制
一次複製少於100個路徑,以500為限制。 超過限制,擲回ReplicationException
。
如果您的應用程式邏輯不需要原子式復寫,您可以將ReplicationOptions.setUseAtomicCalls
設定為false,這會接受任何數量的路徑,但在內部建立儲存貯體以保持在此限制以下。
每個復寫呼叫所傳輸的內容大小不得超過10 MB
。 此規則包含節點和屬性,但不包含任何二進位檔(工作流程套件和內容套件會視為二進位檔)。
疑難排解 troubleshooting
若要疑難排解復寫問題,請導覽至AEM作者服務Web UI中的復寫佇列:
-
從AEM開始功能表,瀏覽至 工具 > 部署 > 發佈
-
選取卡片 發佈
-
檢查應為綠色的佇列狀態
-
您可以測試復寫服務的連線
-
選取 記錄檔 標籤,顯示內容發佈的歷史記錄
如果內容無法發佈,則整個發佈將從AEM Publish Service還原。
在這種情況下,可編輯的主要佇列會顯示紅色狀態,應該加以檢閱以識別哪些專案導致取消發佈。 按一下該佇列,會顯示其暫止專案,如有需要,可從中清除單一專案或所有專案。