资产代理开发

Adobe Experience Manager(AEM)Assets使用代理来分发特定任务的处理过程。

代理是一个特定的(有时是独立的)AEM实例,它使用代理工作程序作为处理工作和创建结果的处理者。 代理工作程序可用于各种任务。 对于AEM Assets代理,可使用此插件加载资产以在AEM Assets内进行渲染。 例如, IDS代理工作程序使用InDesign Server处理文件以在AEM Assets中使用。

当代理是单独的AEM实例时,这有助于减少AEM创作实例的负载。 默认情况下,AEM Assets会在同一JVM(通过代理外部化)中执行资产处理任务,以减少AEM创作实例的负载。

代理(HTTP访问)

将HTTP Servlet配置为在以下位置接受处理作业时,可通过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才能被识别为代理工作程序。

客户端API

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);

云服务配置

注意

com.day.cq.dam.api.proxy下提供了有关代理API的引用文档。

代理和代理工作程序配置均可通过云服务配置来使用,这些配置可从AEM Assets Tools​控制台或/etc/cloudservices/proxy下访问。 对于特定于工作程序的配置详细信息(例如,/etc/cloudservices/proxy/workername),每个代理工作程序应在/etc/cloudservices/proxy下添加一个节点。

注意

以下是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代理工作程序是AEM Assets代理工作程序的一个示例,该代理工作程序已经提供现成的,用于外包Indesign资产的处理。

您还可以开发并配置自己的AEM Assets代理工作程序,以创建一个专门的工作程序来调度和外包您的AEM Assets处理任务。

要设置您自己的自定义代理工作程序,您需要:

  • 设置和实施(使用Sling事件):

    • 自定义作业主题
    • 自定义作业事件处理程序
  • 然后,使用JobService API执行以下操作:

    • 将您的自定义作业派送给代理
    • 管理您的工作
  • 如果要使用工作流中的代理,则必须使用WorkflowExternalProcess API和JobService API实施自定义外部步骤。

下图和步骤详细说明了如何继续:

chlimage_1-249

注意

在以下步骤中,Indesign等效项作为参考示例。

  1. 使用了Sling作业,因此您需要为用例定义作业主题。

    例如,有关IDS代理工作程序的信息,请参阅IDSJob.IDS_EXTENDSCRIPT_JOB

  2. 外部步骤用于触发事件,然后等到该事件完成;这是通过轮询id来完成的。 您必须自行开发步骤来实施新功能。

    实施WorkflowExternalProcess,然后使用JobService API和作业主题准备作业事件并将其调度到JobService(OSGi服务)。

    例如,请参阅INDDMediaExtractProcess.java以获取IDS代理工作程序。

  3. 为主题实施作业处理程序。 此处理程序需要进行开发,以便执行您的特定操作并被视为工作程序实施。

    例如,有关IDS代理工作程序的信息,请参阅IDSJobProcessor.java

  4. 在dam-commons中使用ProxyUtil.java。 这允许您使用dam代理向员工调度作业。

注意

AEM Assets代理框架不提供即装即用的是池机制。

InDesign集成允许访问内部设计服务器(IDSPool)池。 此池专门用于Indesign集成,而不是AEM Assets代理框架的一部分。

注意

结果同步:

如果n个实例使用相同的代理,则处理结果将与代理一起保留。 客户端(AEM作者)的作业是使用在创建作业时提供给客户端的相同唯一作业ID来请求结果。 代理只需完成作业并准备好请求结果即可。

在此页面上