Wanneer u Dispatcher gebruikt met AEM, moet de interactie zodanig zijn geconfigureerd dat een effectief cachebeheer wordt gegarandeerd. Afhankelijk van uw milieu, kan de configuratie prestaties ook verhogen.
De standaardwaarde admin
de gebruikersrekening wordt gebruikt om de replicatieagenten voor authentiek te verklaren die door gebrek geïnstalleerd zijn. U zou een specifieke gebruikersrekening voor gebruik met replicatieagenten moeten tot stand brengen.
Zie voor meer informatie de Replicatie- en transportgebruikers configureren van de lijst AEM beveiligingscontrole.
Een replicatieagent op de AEM auteurinstantie verzendt een verzoek van de geheim voorgeheugenongeldigheid naar Dispatcher wanneer een pagina wordt gepubliceerd. De aanvraag zorgt ervoor dat Dispatcher het bestand uiteindelijk vernieuwt in de cache terwijl nieuwe inhoud wordt gepubliceerd.
Gebruik de volgende procedure om een replicatieagent op de AEM auteursinstantie te vormen voor het ongeldig maken van het geheime voorgeheugen van de Verzender op paginaconactivering:
Open de console AEM Tools. (https://localhost:4502/miscadmin#/etc
)
Open de vereiste replicatieagent onder Hulpmiddelen/replicatie/Agenten op auteur. U kunt de Dispatcher Flush-agent gebruiken die standaard is geïnstalleerd.
Klik op Bewerken en controleer of op het tabblad Instellingen Ingeschakeld is geselecteerd.
(optioneel) Selecteer de optie Alias-update optie.
Op het lusje van het Vervoer, ga URI nodig in om tot Verzender toegang te hebben.
Als u de standaardagent van de Vlek van de Dispatcher gebruikt zult u waarschijnlijk hostname en haven moeten bijwerken; bijvoorbeeld https://<dispatcherHost>:<portApache>/dispatcher/invalidate.cache
Opmerking: Voor de agenten van de Vlek van de Verzender, wordt het bezit van URI gebruikt slechts als u op weg-gebaseerde virtuele gastheeringangen gebruikt om tussen landbouwbedrijven te onderscheiden. U gebruikt dit gebied om het landbouwbedrijf te richten om ongeldig te maken. farm #1 heeft bijvoorbeeld een virtuele host van www.mysite.com/path1/*
en farm #2 heeft een virtuele host van www.mysite.com/path2/*
. U kunt een URL gebruiken van /path1/invalidate.cache
om de eerste boerderij te richten en /path2/invalidate.cache
om de tweede boerderij te richten. Zie voor meer informatie Dispatcher gebruiken met meerdere domeinen.
Configureer desgewenst andere parameters.
Klik op OK om de agent te activeren.
U kunt ook de Dispatcher Flush-agent openen en configureren vanuit de AEM Touch UI.
Zie voor meer informatie over het inschakelen van toegang tot vanity-URL's Toegang tot URL's met Vanity inschakelen.
De agent voor het flushing dispatchergeheime voorgeheugen moet geen gebruikersnaam en wachtwoord hebben, maar als gevormd zullen zij met basisauthentificatie worden verzonden.
Er zijn twee mogelijke problemen met deze aanpak:
De Dispatcher moet bereikbaar zijn vanuit de ontwerpinstantie. Als uw netwerk (b.v. de firewall) dusdanig wordt gevormd dat de toegang tussen twee beperkt is, kan dit niet het geval zijn.
De openbaarmaking en de ongeldigmaking van de cache vinden tegelijkertijd plaats. Afhankelijk van de timing kan een gebruiker een pagina aanvragen vlak nadat deze uit de cache is verwijderd en vlak voordat de nieuwe pagina wordt gepubliceerd. AEM retourneert nu de oude pagina en de Dispatcher slaat deze opnieuw in het cachegeheugen op. Dit is meer een probleem voor grote sites.
Onder bepaalde omstandigheden kunnen de prestaties worden verbeterd door cachebeheer over te brengen van de ontwerpomgeving naar een publicatie-instantie. Het zal dan het het publiceren milieu (niet het AEM auteursmilieu) zijn die een verzoek van de geheim voorgeheugenongeldigverklaring naar Dispatcher verzendt wanneer een gepubliceerde pagina wordt ontvangen.
Deze omstandigheden omvatten:
Het besluit om deze methode te gebruiken moet worden genomen door een ervaren AEM beheerder.
Het leegmaken van de verzender wordt gecontroleerd door een replicatieagent die op de publicatieinstantie werkt. Nochtans, wordt de configuratie gemaakt op het auteursmilieu en dan overgebracht door de agent te activeren:
Open de console AEM Tools.
Open de vereiste replicatieagent onder Hulpmiddelen/replicatie/Agenten bij publiceren. U kunt de Dispatcher Flush-agent gebruiken die standaard is geïnstalleerd.
Klik op Bewerken en controleer of op het tabblad Instellingen Ingeschakeld is geselecteerd.
(optioneel) Selecteer de optie Alias-update optie.
Op het lusje van het Vervoer, ga URI nodig in om tot Verzender toegang te hebben.
Als u de standaardagent van de Vlek van de Dispatcher gebruikt zult u waarschijnlijk hostname en haven moeten bijwerken; bijvoorbeeld: http://<dispatcherHost>:<portApache>/dispatcher/invalidate.cache
Opmerking: Voor de agenten van de Vlek van de Verzender, wordt het bezit van URI gebruikt slechts als u op weg-gebaseerde virtuele gastheeringangen gebruikt om tussen landbouwbedrijven te onderscheiden. U gebruikt dit gebied om het landbouwbedrijf te richten om ongeldig te maken. farm #1 heeft bijvoorbeeld een virtuele host van www.mysite.com/path1/*
en farm #2 heeft een virtuele host van www.mysite.com/path2/*
. U kunt een URL gebruiken van /path1/invalidate.cache
om de eerste boerderij te richten en /path2/invalidate.cache
om de tweede boerderij te richten. Zie voor meer informatie Dispatcher gebruiken met meerdere domeinen.
Configureer desgewenst andere parameters.
Log in de publicatieinstantie en valideer de configuratie van de flush agent. Zorg er ook voor dat deze functie is ingeschakeld.
Herhaal deze bewerking voor elke betrokken publicatie-instantie.
Na het vormen, wanneer u een pagina van auteur activeert om te publiceren, stelt deze agent een standaardreplicatie in werking. Het logboek bevat berichten die verzoeken aangeven die afkomstig zijn van uw publicatieserver, vergelijkbaar met het volgende voorbeeld:
<publishserver> 13:29:47 127.0.0.1 POST /dispatcher/invalidate.cache 200
Als u de Dispatcher-cache ongeldig wilt maken (of wilt leegmaken) zonder een pagina te activeren, kunt u een HTTP-aanvraag naar de dispatcher verzenden. U kunt bijvoorbeeld een AEM maken waarmee beheerders of andere toepassingen de cache kunnen leegmaken.
Door de HTTP-aanvraag verwijdert Dispatcher specifieke bestanden uit de cache. De Dispatcher vernieuwt desgewenst de cache met een nieuwe kopie.
Geef een HTTP- verzoek uit dat Dispatcher ertoe brengt om dossiers van het geheime voorgeheugen te schrappen. Dispatcher plaatst de bestanden alleen opnieuw in het cachegeheugen als het een clientverzoek voor de pagina ontvangt. Het verwijderen van cachebestanden op deze manier is geschikt voor websites die waarschijnlijk geen gelijktijdige aanvragen voor dezelfde pagina ontvangen.
De HTTP-aanvraag heeft de volgende vorm:
POST /dispatcher/invalidate.cache HTTP/1.1
CQ-Action: Activate
CQ-Handle: path-pattern
Content-Length: 0
Dispatcher spoelt (verwijdert) de cachebestanden en mappen met namen die overeenkomen met de waarde van de CQ-Handler
header. Bijvoorbeeld een CQ-Handle
van /content/geomtrixx-outdoors/en
komt overeen met de volgende items:
Alle bestanden (van een willekeurige bestandsextensie) met de naam en
in de geometrixx-outdoors
directory
Elke map met de naam " _jcr_content
" onder de map en (die, indien aanwezig, renderingen van subknooppunten van de pagina in de cache bevat)
Alle andere bestanden in de cache van de verzender (of tot een bepaald niveau, afhankelijk van de /statfileslevel
instellen) ongeldig worden gemaakt door op de knop .stat
bestand. De laatste wijzigingsdatum van dit bestand wordt vergeleken met de laatste wijzigingsdatum van een document in de cache en het document wordt opnieuw opgehaald als het .stat
is nieuwer. Zie Bestanden op mapniveau ongeldig maken voor meer informatie.
De ongeldigmaking (d.w.z. het aanraken van .stat dossiers) kan worden verhinderd door een extra Kopbal te verzenden CQ-Action-Scope: ResourceOnly
. Dit kan worden gebruikt om bepaalde middelen te spoelen zonder andere delen van het geheime voorgeheugen ongeldig te maken, zoals gegevens JSON die dynamisch worden gecreeerd en regelmatig het spoelen onafhankelijk van het geheime voorgeheugen vereisen (b.v. die gegevens vertegenwoordigen die van een derdesysteem worden verkregen om nieuws, voorraadtikkers, enz. te tonen).
Geef een HTTP-aanvraag uit die ervoor zorgt dat Dispatcher cachebestanden verwijdert en het bestand direct ophaalt en opnieuw plaatst. U kunt bestanden verwijderen en onmiddellijk opnieuw in cache plaatsen wanneer websites waarschijnlijk gelijktijdige clientverzoeken voor dezelfde pagina ontvangen. Onmiddellijk het recaching zorgt ervoor dat de Dispatcher de pagina terugwint en in het voorgeheugen onderbrengt slechts één keer, in plaats van één voor elk van de gelijktijdige cliëntverzoeken.
Opmerking: Het verwijderen en in de cache plaatsen van bestanden mag alleen op het publicatieexemplaar worden uitgevoerd. Wanneer uitgevoerd vanaf de auteurinstantie, komen de rasvoorwaarden voor wanneer pogingen om middelen terug te winnen voorkomen alvorens zij zijn gepubliceerd.
De HTTP-aanvraag heeft de volgende vorm:
POST /dispatcher/invalidate.cache HTTP/1.1
CQ-Action: Activate
`Content-Type: text/plain
CQ-Handle: path-pattern
Content-Length: numchars in bodypage_path0
page_path1
...
page_pathn
De paginaden die direct opnieuw worden getekend, worden weergegeven op afzonderlijke regels in de berichttekst. De waarde van CQ-Handle
Dit is het pad van een pagina die de pagina's ongeldig maakt om opnieuw te tekenen. (Zie de /statfileslevel
parameter van de Cache configuratie-item.) In het volgende voorbeeld wordt het HTTP-aanvraagbericht verwijderd en wordt de /content/geometrixx-outdoors/en.html page
:
POST /dispatcher/invalidate.cache HTTP/1.1
CQ-Action: Activate
Content-Type: text/plain
CQ-Handle: /content/geometrixx-outdoors/en/men.html
Content-Length: 36
/content/geometrixx-outdoors/en.html
De volgende code implementeert een servlet die een ongeldige aanvraag naar Dispatcher verzendt. servlet ontvangt een verzoekbericht dat bevat handle
en page
parameters. Deze parameters geven de waarde van de CQ-Handle
en het pad van de pagina naar de rechthoek. De servlet gebruikt de waarden om de HTTP- aanvraag voor Dispatcher samen te stellen.
Wanneer servlet aan de publicatieinstantie wordt opgesteld, veroorzaakt volgende URL Dispatcher om de /content/geometrixx-outdoors/en.html pagina te schrappen en dan een nieuw exemplaar in het voorgeheugen onder te brengen.
10.36.79.223:4503/bin/flushcache/html?page=/content/geometrixx-outdoors/en.html&handle=/content/geometrixx-outdoors/en/men.html
Dit voorbeeldservlet is niet veilig en toont slechts het gebruik van het HTTP Post- verzoekbericht aan. Uw oplossing zou toegang tot servlet moeten beveiligen.
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Property;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
@Component(metatype=true)
@Service
public class Flushcache extends SlingSafeMethodsServlet {
@Property(value="/bin/flushcache")
static final String SERVLET_PATH="sling.servlet.paths";
private Logger logger = LoggerFactory.getLogger(this.getClass());
public void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
try{
//retrieve the request parameters
String handle = request.getParameter("handle");
String page = request.getParameter("page");
//hard-coding connection properties is a bad practice, but is done here to simplify the example
String server = "localhost";
String uri = "/dispatcher/invalidate.cache";
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("https://"+host+uri);
post.setRequestHeader("CQ-Action", "Activate");
post.setRequestHeader("CQ-Handle",handle);
StringRequestEntity body = new StringRequestEntity(page,null,null);
post.setRequestEntity(body);
post.setRequestHeader("Content-length", String.valueOf(body.getContentLength()));
client.executeMethod(post);
post.releaseConnection();
//log the results
logger.info("result: " + post.getResponseBodyAsString());
}
}catch(Exception e){
logger.error("Flushcache servlet exception: " + e.getMessage());
}
}
}