Adobe Experience Manager Assets 使用代理为特定任务分发处理。
代理是一种特定的(有时是单独的)Experience Manager实例,它使用代理工作程序作为负责处理作业和创建结果的处理器。 代理工作程序可用于多种任务。 如果是 Assets 代理,这可用于加载资源以在Assets中渲染。 例如, IDS代理工作进程 使用 Adobe InDesign 用于处理资源中使用的文件的服务器。
当代理是单独的 Experience Manager 实例这有助于减轻 Experience Manager 创作实例。 默认情况下, Assets 在同一JVM中执行资源处理任务(通过代理外部化)以减少 Experience Manager 创作实例。
当代理配置为接受以下位置的处理作业时,可以通过HTTP Servlet使用该代理: /libs/dam/cloud/proxy
. 此servlet根据发布的参数创建sling作业。 然后将其添加到代理作业队列,并连接到相应的代理工作进程。
job
要求:参数 jobevent
必须设置为序列化值映射。 这用于创建 Event
用于作业处理器。
结果:添加新作业。 如果成功,则会返回唯一的作业ID。
curl -u admin:admin -F":operation=job" -F"someproperty=xxxxxxxxxxxx"
-F"jobevent=serialized value map" http://localhost:4502/libs/dam/cloud/proxy
result
要求:参数 jobid
必须设置。
结果:返回由作业处理器创建的结果节点的JSON表示形式。
curl -u admin:admin -F":operation=result" -F"jobid=xxxxxxxxxxxx"
http://localhost:4502 /libs/dam/cloud/proxy
resource
要求:必须设置参数jobid。
结果:返回与给定作业关联的资源。
curl -u admin:admin -F":operation=resource" -F"jobid=xxxxxxxxxxxx"
-F"resourcePath=something.pdf" http://localhost:4502/libs/dam/cloud/proxy
remove
要求:必须设置参数jobid。
结果:删除作业(如果找到)。
curl -u admin:admin -F":operation=remove" -F"jobid=xxxxxxxxxxxx"
http://localhost:4502/libs/dam/cloud/proxy
代理工作进程是负责处理作业和创建结果的处理器。 工作进程驻留在代理实例上,必须实现 sling JobProcessor 将被识别为代理工作进程。
工作人员必须实施 sling JobProcessor 将被识别为代理工作进程。
JobService
作为OSGi服务提供,该服务提供创建作业、删除作业以及从这些作业获取结果的方法。 此服务的默认实施(JobServiceImpl
)使用HTTP客户端与远程代理servlet进行通信。
以下是API用法的示例:
@Reference
JobService proxyJobService;
// to create a new job
final Hashtable props = new Hashtable();
props.put("someproperty", "some value");
props.put(JobUtil.PROPERTY_JOB_TOPIC, "myworker/job"); // this is an identifier of the worker
final String jobId = proxyJobService.addJob(props, new Asset[]{asset});
// to check status (returns JobService.STATUS_FINISHED or JobService.STATUS_INPROGRESS)
int status = proxyJobService.getStatus(jobId)
// to get the result
final String jsonString = proxyJobService.getResult(jobId);
// to remove job and cleanup
proxyJobService.removeJob(jobId);
可通过云服务配置使用代理和代理工作程序配置,可从访问 Assets 工具 控制台或下 /etc/cloudservices/proxy
. 每个代理工作进程应在 /etc/cloudservices/proxy
用于工作进程特定的配置详细信息(例如, /etc/cloudservices/proxy/workername
)。
参见 InDesign Server代理工作进程配置 和 Cloud Services配置 了解更多信息。
以下是API用法的示例:
@Reference(policy = ReferencePolicy.STATIC)
ProxyConfig proxyConfig;
// to get proxy config
Configuration cloudConfig = proxyConfig.getConfiguration();
final String value = cloudConfig.get("someProperty", "defaultValue");
// to get worker config
Configuration cloudConfig = proxyConfig.getConfiguration("workername");
final String value = cloudConfig.get("someProperty", "defaultValue");
此 IDS代理工作进程 是 Assets 现成可用的代理工作程序,用于将InDesign资源的处理外包出去。
您还可以开发和配置自己的 Assets 代理工作人员,创建专门的工作人员来派送并外包您的 Assets 正在处理任务。
设置您自己的自定义代理工作程序需要您:
设置和实施(使用Sling事件):
然后,使用JobService API可以:
如果要从工作流中使用代理,则必须使用WorkflowExternalProcess API和JobService API实施自定义外部步骤。
以下图表和步骤详细说明了如何继续:
在以下步骤中,将InDesign等效项表示为参考示例。
A Sling作业 使用,因此您需要为用例定义作业主题。
例如,请参阅 IDSJob.IDS_EXTENDSCRIPT_JOB
用于IDS代理工作进程。
外部步骤用于触发事件,然后等待该操作完成;可通过轮询ID来完成此操作。 您必须自行开发步骤来实施新功能。
实施 WorkflowExternalProcess
,然后使用作业服务API和作业主题准备作业事件并将其调度到作业服务(OSGi服务)。
例如,请参阅 INDDMediaExtractProcess
.java表示IDS代理工作进程。
为主题实施作业处理程序。 此处理程序需要进行开发,以便执行特定操作并被视为工作程序实施。
例如,请参阅 IDSJobProcessor.java
用于IDS代理工作进程。
利用 ProxyUtil.java
在dam-commons中。 这允许您使用DAM代理将作业分派给工作人员。
什么是 Assets 代理框架不提供现成的池机制。
此 InDesign 集成允许访问池 InDesign 服务器(IDSPool)。 此池特定于 InDesign 集成而不是的一部分 Assets 代理框架。
结果同步:
如果n个实例使用同一代理,则处理结果将保留在代理中。 客户端(Experience Manager作者)的作业是使用在作业创建时提供给客户端的相同唯一作业ID来请求结果。 代理只需完成作业并准备好结果即可请求。