工作流使您能够自动完成Adobe Experience Manager(AEM)活动。
它们通常表示AEM环境中发生的大量处理,因此,当自定义工作流步骤未根据最佳实践编写,或者现成工作流未配置为尽可能高效地运行时,系统会因此受到影响。
因此,强烈建议仔细规划工作流实施。
在配置工作流程(自定义和/或现成流程)时,应牢记以下几点:
要优化高摄取负载,可将工作流定义为临时。
当工作流为临时工作流时,与中间工作步骤相关的运行时数据在运行时不会保留在JCR中(当然会保留输出再现)。
优势包括:
如果您的企业要求您出于审计目的而保留/存档工作流运行时数据,请不要启用此功能。
有关DAM工作流的性能调整指南,请参阅《AEM Assets性能调整指南》。
AEM可以允许多个工作流线程同时运行。 默认情况下,线程数配置为系统上处理器核心数的一半。
如果正在执行的工作流需要系统资源,这可能意味着AEM将几乎不能用于其他任务,如渲染创作UI。 因此,在批量图像上传等活动期间,系统可能不灵活。
要解决此问题,Adobe建议将最大并行作业的数量配置为系统上处理器核心数的一半到四分之三。 这应允许系统在处理这些工作流时保持响应能力。
要配置最大并行作业,您可以:
从AEM Web控制台配置OSGi Configuration;对于队列:Granite工作流队列(Apache Sling作业队列配置)。
通过AEM Web控制台的Sling Jobs选项配置队列;对于作业队列配置:Granite Workflow Queue,位于http://localhost:4502/system/console/slingevent
。
此外,还为Granite工作流外部进程作业队列提供了单独的配置。 它用于启动外部二进制文件的工作流进程,如InDesign Server或映像Magick。
在某些情况下,配置单个作业队列以基于单个作业控制并发线程或其他队列选项非常有用。 您可以通过Apache Sling作业队列配置工厂从Web控制台添加和配置单个队列。 要查找要列表的适当主题,请执行工作流的模型,并在Sling Jobs控制台中查找它;例如,在http://localhost:4502/system/console/slingevent
。
也可以为临时工作流添加单个作业队列。
在标准安装中,AEM提供维护控制台,可安排和配置每日和每周的维护活动;例如,在:
http://localhost:4502/libs/granite/operations/content/maintenance.html
默认情况下,每周维护窗口具有工作流清除任务,但需要先配置该窗口,才能运行。 要配置工作流清除,必须在Web控制台中添加新的Adobe花岗岩工作流清除配置。
有关AEM中维护任务的详细信息,请参见操作仪表板。
编写自定义工作流程时,应牢记一些事情。
工作流模型、启动器、脚本和通知的定义会根据类型保存在存储库中;即开箱即用、自定义等。
另请参阅AEM 6.4](/docs/experience-manager-64/sites-deploying/repository-restructuring.html?lang=zh-Hans)中的[存储库重组。
工作流模型根据类型存储在存储库中:
开箱即用的工作流程设计采用以下路径:
/libs/settings/workflow/models/
不要:
/libs
中的任何内容由于任何更改可能会在升级时或在安装修补程序、累积修复包或服务包时被覆盖。
自定义工作流设计位于以下位置:
/conf/global/settings/workflow/models/...
运行时工作流程设计(现成和自定义)都保留在以下路径下:
/var/workflow/models/
旧版工作流程设计(设计时和运行时)按以下路径进行:
/etc/workflow/models/
如果这些设计使用AEM UI 进行编辑,则详细信息将复制到新位置。
工作流启动器定义也根据类型存储在存储库中:
开箱即用的工作流启动器位于以下路径下:
/libs/settings/workflow/launcher/
不要:
/libs
中的任何内容由于任何更改可能会在升级时或在安装修补程序、累积修复包或服务包时被覆盖。
自定义工作流启动器位于:
/conf/global/settings/workflow/launcher/...
旧版工作流启动程序位于以下路径下:
/etc/workflow/launcher/
如果这些定义使用AEM UI 进行编辑,则详细信息将复制到新位置。
工作流脚本还根据类型存储在存储库中:
开箱即用的工作流脚本位于以下路径下:
/libs/workflow/scripts/
不要:
/libs
中的任何内容由于任何更改可能会在升级时或在安装修补程序、累积修复包或服务包时被覆盖。
自定义工作流脚本位于以下位置:
/apps/workflow/scripts/...
旧版工作流脚本保存在以下路径中:
/etc/workflow/scripts/
工作流通知也根据类型存储在存储库中:
现成的工作流通知定义位于以下路径下:
/libs/settings/workflow/notification/
不要:
/libs
中的任何内容由于任何更改可能会在升级时或在安装修补程序、累积修复包或服务包时被覆盖。
自定义工作流通知定义位于以下位置:
/conf/global/settings/workflow/notification/...
如果要覆盖工作流通知文本,请在以下位置创建一个覆盖路径:
/conf/global/settings/workflow/notification/<path-under-libs>
传统工作流通知定义位于以下路径下:
/etc/workflow/notification/
与任何自定义开发一样,始终建议尽可能使用用户的会话:
实施工作流进程时:
public void execute(WorkItem item, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException {
// to obtain a jcr session:
javax.jcr.Session jcrSession = workflowSession.adaptTo(javax.jcr.Session.class);
// to obtain a sling resource resolver:
org.apache.sling.api.resource.ResourceResolver slingResourceResolver = workflowSession.adaptTo(org.apache.sling.api.resource.ResourceResolver.class);
保存会话:
在工作流进程中,如果WorkflowSession
用于修改存储库,则不显式保存会话——工作流将在会话完成时保存会话。
Session.Save
不应从工作流步骤中调用:
save
,因为工作流引擎在工作流完成执行后自动保存会话。通过消除不必要的节省,您可以减少开销,从而提高工作流的效率。
如果您确实创建了自己的jcr会话,则需要保存它。
有一个监听器负责所有已注册的工作流启动器:
创建过多启动器将导致评估过程运行更慢。
在单个启动器上在存储库的根中创建全局事件路径将导致工作流引擎侦听并评估对存储库中每个节点的创建/修改。 因此,建议仅创建所需的启动器,并尽可能使覆盖路径具体化。
由于这些启动器对工作流行为的影响,禁用任何未使用的现成启动器也非常有用。
自定义启动器配置已得到增强,可支持以下配置:
工作流可以带来大量开销,无论是在内存中创建的对象,还是在存储库中跟踪的节点。 因此,最好让工作流在其内部进行处理,而不是开始其他工作流。
一个例子是对一组内容实施业务流程然后激活该内容的工作流。 最好创建一个激活这些节点中的每个节点的自定义工作流进程,而不是为需要发布的每个内容节点启动激活内容模型。 此方法需要额外的开发工作,但执行时比为每个激活启动单独的工作流实例更加有效。
另一个示例是处理多个节点、创建工作流包、然后激活所述包的工作流。 您可以在创建包的步骤中更改工作流的有效负荷,然后调用该步骤以在同一工作流模型中激活该包,而不是先创建包,然后以包作为有效负荷启动单独的工作流。
设计工作流模型时,您可以选择在工作流步骤上启用处理程序。 或者,您也可以向工作流步骤中添加代码,以确定下一步应运行哪个步骤,然后执行它。
建议使用处理程序高级功能,因为它可提供更好的性能。
您可以定义工作流阶段,然后将任务/步骤分配到特定工作流阶段。
当您单击收件箱](/docs/experience-manager-64/sites-authoring/workflows-participating.html?lang=zh-Hans#opening-a-workflow-item-to-view-details-and-take-actions)中某个工作项的[工作流信息选项卡时,此信息用于显示工作流的进度。 可以编辑现有工作流模型以添加阶段。
激活页面流程步骤将为您激活页面,但不会自动查找任何引用的DAM资产并激活这些资产。
如果您计划将此步骤用作工作流模型的一部分,请牢记这一点。
升级实例时:
确保在升级实例之前备份任何自定义工作流模型。
确认您的自定义工作流不存储在location下:
/libs/settings/workflow/models/projects
另请参阅AEM 6.4](/docs/experience-manager-64/sites-deploying/repository-restructuring.html?lang=zh-Hans)中的[存储库重组。
有许多系统工具可用于帮助监视、维护和排除工作流故障。 以下所有示例URL都使用localhost:4502
,但任何作者实例(<hostname>:<port>
)都应提供。
http://localhost:4502/system/console/slingevent
Sling作业处理控制台将显示:
工作流报告工具将在6.3中删除,以防止性能降级。
http://localhost:4502/system/console/jmx/com.adobe.granite.workflow:type=Maintenance
工作流维护MBean公开了几个有用的维护例程,如清除已完成的工作流和检索工作流统计信息。
有关更多信息,请参阅: