複製 replication
Adobe Experience Manager as a Cloud Service使用Sling內容發佈功能將內容移動至復寫至AEM執行階段以外的Adobe Developer上執行的管道服務。
發佈內容的方法 methods-of-publishing-content
不建議建置您自己的大量發佈自訂程式碼。
如果您因任何原因必須自訂,則可使用現有的工作流程API,透過此步驟觸發工作流程。
只發佈必須發佈的內容永遠是好的做法。 如果不需要的話,也不要嘗試發佈大量內容。 不過,您可以使用樹狀啟動工作流程步驟在工作流程中傳送的內容數量並無限制。
快速取消/發佈 — 計畫取消/發佈 publish-unpublish
此功能可讓您立即發佈所選頁面,無需透過「管理發布」方法選擇其他選項。
如需詳細資訊,請參閱管理出版物。
開啟和關閉時間 — 觸發器設定 on-and-off-times-trigger-configuration
開啟時間和 關閉時間 的其他可能性可從頁面屬性🔗的基本索引標籤取得。
若要實現此功能的自動復寫,請在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顯示單獨的佇列 — 發佈層級會自動調整,因此每個pod佇列會增加複雜性,而不會帶來實際好處。 佇列狀態會合併如下:
- 持續存在 — 變更會持續儲存在發佈層級。 專案清除此佇列後,內容會持續存在;發佈執行個體會隨著時間達到一致狀態。
- 已完整發佈 — 變更已在所有發佈Pod上線,且受影響路徑的Dispatcher快取已清除。 專案清除此佇列後,訪客會收到更新的內容。
監視復寫佇列 monitor-replication-queues
-
從AEM 全域導覽,導覽至工具 > 部署。
-
選取發佈,然後開啟 發佈 或 預覽 代理程式卡。
-
在 狀態 標籤上,確認每個佇列都顯示正常狀態。 檢閱 個擱置中的專案 以等待處理工作,檢閱最近處理過的專案。
-
選取 測試連線 以驗證代理程式可連線到散發服務。
-
選取 記錄檔 索引標籤以檢視內容發佈的歷程記錄。
疑難排解 troubleshooting
如果內容無法發佈,則會從AEM發佈服務還原發佈。 使用監視復寫佇列開啟代理程式 狀態 標籤,並識別受影響的佇列。
當佇列顯示紅色狀態時,請檢閱其擱置專案以找出導致失敗的原因。 選取佇列以檢視暫止專案,然後視需要清除個別專案或整個佇列。