Crie um serviço OSGi com reconhecimento de cluster

Problema

Como criar um serviço OSGi capaz de detectar se está ou não em execução em um cluster do AEM 5.6.1 como nó líder?

Solução

No AEM 5.6.1 e posterior, use uma nova API de topologia. Para obter detalhes, consulte http://sling.apache.org/documentation/bundles/discovery-api-and-impl.html.

Nas versões anteriores do AEM, identificar uma instância principal em um ambiente de cluster usando Descritor de repositório "crx.cluster.master" ou interface ClusterAware.

Exemplo

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.sling.discovery.TopologyEvent;
import org.apache.sling.discovery.TopologyEventListener;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;



@Component(metatype = true)
@Service(value = { TopologyEventListener.class })

public class MyClusterAwareService implements Runnable,TopologyEventListener {

    private final Logger log = LoggerFactory.getLogger(MyClusterAwareService.class);

   private Boolean isLeaderInstance = Boolean.FALSE;

    /**
     * @see org.apache.sling.discovery.TopologyEventListener#handleTopologyEvent(org.apache.sling.discovery.TopologyEvent)
     */
    public void handleTopologyEvent(final TopologyEvent event) {
        if ( event.getType() == TopologyEvent.Type.TOPOLOGY_CHANGED
                || event.getType() == TopologyEvent.Type.TOPOLOGY_INIT) {
            this.isLeaderInstance = event.getNewView().getLocalInstance().isLeader();
            log.info("isLeader confirmed @@@@@@@@@@@@@@@@@@@"+ this.isLeaderInstance);
        }
    }

    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run() {
        if (isLeaderInstance) {
            //TODO: your code here
            log.info("isLeader run @@@@@@@@@@@@@@@@@@@"+ this.isLeaderInstance);


        }
    }


}

Baixe o pacote de exemplo

Download

 Adobe

Receba ajuda com mais rapidez e facilidade

Novo usuário?

Adobe MAX 2024

Adobe MAX:
a conferência da criatividade

14 a 16 de outubro, Miami Beach e online

Adobe MAX

A conferência da criatividade

14 a 16 de outubro, Miami Beach e online

Adobe MAX 2024

Adobe MAX:
a conferência da criatividade

14 a 16 de outubro, Miami Beach e online

Adobe MAX

A conferência da criatividade

14 a 16 de outubro, Miami Beach e online