Adobe Experience Manager (AEM) Assets verwendet einen Proxy, um die Verarbeitung bestimmter Aufgaben zu verteilen.
Ein Proxy ist eine bestimmte (und gelegentlich separate) AEM-Instanz, die Proxy Worker als Prozessoren verwendet, um Aufträge zu bearbeiten und Ergebnisse zu generieren. Ein Proxy Worker kann für eine Vielzahl von Aufgaben verwendet werden. Bei einem AEM Assets-Proxy kann dies zum Laden von Assets zum Rendern innerhalb von AEM Assets verwendet werden. Beispielsweise verarbeitet der IDS-Proxy-Worker Dateien, die in AEM Assets verwendet werden sollen, mit einem InDesign-Server.
Wenn der Proxy eine separate AEM-Instanz ist, wird die Last für die AEM-Autorinstanz(en) reduziert. Standardmäßig führt AEM Assets die Aufgaben zur Asset-Verarbeitung in derselben JVM aus (über Proxy extern übertragen), um die Belastung der AEM Authoring-Instanz zu verringern.
Proxys, deren Konfiguration Verarbeitungsaufträge zulässt, sind über das HTTP-Servlet verfügbar: /libs/dam/cloud/proxy
. Dieses Servlet erstellt einen Sling-Auftrag aus den geposteten Parametern. Der Auftrag wird dann der Proxy-Auftragswarteschlange hinzugefügt und mit dem entsprechenden Proxy Worker verbunden.
job
Anforderungen: Der Parameter jobevent
muss als serialisierte Wertezuordnung festgelegt werden. Dies wird zum Erstellen eines Event
für einen Auftragsprozessor verwendet.
Ergebnis: Fügt einen neuen Auftrag hinzu. Wenn der Vorgang erfolgreich ist, wird eine eindeutige Auftrags-ID zurückgegeben.
curl -u admin:admin -F":operation=job" -F"someproperty=xxxxxxxxxxxx"
-F"jobevent=serialized value map" http://localhost:4502/libs/dam/cloud/proxy
result
Anforderungen: der Parameter jobid
muss eingestellt werden.
Ergebnis: Gibt die JSON-Darstellung des Ergebnisknotens zurück, wie er durch den Auftragsprozessor erstellt wurde.
curl -u admin:admin -F":operation=result" -F"jobid=xxxxxxxxxxxx"
http://localhost:4502 /libs/dam/cloud/proxy
resource
Anforderungen: Der Parameter „jobid“ must festgelegt sein.
Ergebnis: Gibt eine Ressource zurück, die dem jeweiligen Auftrag zugeordnet ist.
curl -u admin:admin -F":operation=resource" -F"jobid=xxxxxxxxxxxx"
-F"resourcePath=something.pdf" http://localhost:4502/libs/dam/cloud/proxy
remove
Anforderungen: Der Parameter „jobid“ must festgelegt sein.
Ergebnisse:: Entfernt einen gefundenen Auftrag.
curl -u admin:admin -F":operation=remove" -F"jobid=xxxxxxxxxxxx"
http://localhost:4502/libs/dam/cloud/proxy
Ein Proxy Worker ist ein Prozessor, der für die Verarbeitung von Aufträgen und die Generierung von Ergebnissen zuständig ist. Worker befinden sich auf der Proxy-Instanz und müssen sling JobProcessor implementieren, damit sie als Proxy Worker erkannt werden.
Worker müssen sling JobProcessor implementieren, damit sie als Proxy Worker erkannt werden.
JobService
ist als OSGi-Dienst verfügbar, der Methoden zur Erstellung und Entfernung von Aufträgen und dem Abruf von Ergebnissen aus den Aufträgen bereitstellt. Die Standardimplementierung des Dienstes (JobServiceImpl
) verwendet den HTTP-Client für die Kommunikation mit dem Remote-Proxy-Servlet.
Nachstehend finden Sie ein Beispiel für die API-Verwendung:
@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);
Die Referenzdokumentation für die Proxy-API ist unter com.day.cq.dam.api.proxy
verfügbar.
Sowohl Proxy- als auch Proxy-Worker-Konfigurationen sind über Cloud Services-Konfigurationen verfügbar, die über die AEM Assets Tools-Konsole oder unter /etc/cloudservices/proxy
zugänglich sind. Es wird erwartet, dass jeder Proxy-Worker einen Knoten unter /etc/cloudservices/proxy
für arbeitnehmerspezifische Konfigurationsdetails (z. B. /etc/cloudservices/proxy/workername
) hinzufügt.
Weitere Informationen finden Sie unter Konfiguration von InDesign Server Proxy Worker und Cloud Service-Konfiguration.
Nachstehend finden Sie ein Beispiel für die API-Verwendung:
@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");
Der IDS-Proxy-Worker ist ein Beispiel für einen AEM Assets-Proxy-Mitarbeiter, der bereits standardmäßig bereitgestellt wird, um die Verarbeitung von InDesign-Assets auszulagern.
Sie können auch Ihren eigenen AEM Assets-Proxy-Mitarbeiter entwickeln und konfigurieren, um einen spezialisierten Mitarbeiter zu erstellen, der Ihre AEM Assets-Aufgaben ausgibt und auslagert.
Für die Einrichtung eines eigenen benutzerdefinierten Proxy Workers müssen Sie die folgenden Aufgaben ausführen:
Einrichten und Implementieren (mit Sling Eventing):
Führen Sie mit der JobService-API die folgenden Aufgaben aus:
Wenn Sie den Proxy aus einem Workflow verwenden möchten, müssen Sie einen externen benutzerdefinierten Schritt implementieren. Verwenden Sie dafür die WorkflowExternalProcess-API und die JobService-API.
Die Vorgehensweise wird im folgenden Diagramm erläutert:
In den folgenden Schritten werden InDesign-Äquivalente als Referenzbeispiele angegeben.
Da ein Sling-Auftrag verwendet wird, müssen Sie ein Auftragsthema für Ihren Anwendungsfall definieren.
Als Beispiel dient IDSJob.IDS_EXTENDSCRIPT_JOB
für den IDS Proxy Worker.
Mit dem externen Schritt wird das Ereignis ausgelöst, anschließend wird auf den Abschluss gewartet. Hierfür wird die ID abgerufen. Sie müssen einen eigenen Schritt entwickeln, um eine neue Funktionalität zu implementieren.
Implementieren Sie einen WorkflowExternalProcess
. Bereiten Sie dann mit der JobService-API und Ihrem Auftragsthema ein Auftragsereignis vor und senden Sie es an den JobService (einen OSGi-Dienst).
Als Beispiel dient INDDMediaExtractProcess
für den IDS Proxy Worker.
Implementieren Sie einen Auftrags-Handler für Ihr Thema. Der Handler muss entwickelt werden, damit er die von Ihnen gewünschte spezifische Aktion ausführt und als Worker-Implementierung betrachtet wird.
Als Beispiel dient IDSJobProcessor.java
für den IDS Proxy Worker.
Verwenden Sie ProxyUtil.java
in dam-commons. Damit können Sie Aufträge mit dem dam-Proxy an Worker senden.
Was das AEM Assets-Proxy-Framework nicht standardmäßig bereitstellt, ist der Poolmechanismus.
Die Integration mit InDesign ermöglicht jedoch den Zugriff auf einen Pool von InDesign-Servern (IDSPool). Dieses Pooling ist spezifisch für die InDesign-Integration und nicht Teil des AEM Assets-Proxy-Frameworks.
Synchronisierung der Ergebnisse:
Bei n Instanzen, die denselben Proxy verwenden, bleibt das Verarbeitungsergebnis beim Proxy. Der Client (AEM Author) hat die Aufgabe, das Ergebnis anzufordern. Dabei wird dieselbe eindeutige Auftrags-ID verwendet, die dem Client beim Erstellen des Auftrags zugewiesen wurde. Der Proxy erledigt einfach den Auftrag und hält das Ergebnis abrufbereit.