2017-05-16 4 views
0

Ich möchte einige gezündete Serverknoten ausführen und eine separate Clustergruppe von ihnen erstellen (nennen Sie es "WORKER"). Knoten aus dieser Clustergruppe sollen take() Elemente aus der ignite queue verarbeiten, auf irgendeine Weise verarbeiten und etwas in einen Cache stellen, der sich auf Knoten mit der Clustergruppe "CACHE" befindet. Hier ist, wie es aussieht:Ausführen zünden Serverknoten

public interface Batch{ } 

public class Runner{ 

    //initialize batchesToProcess as ignite distrubted queue 
    Queue<Batch> batchesToProcess; 

    //I need Ignite here. 
    //@IgniteInstanceResource does not work this way 
    //Because this is just a bean declared in ingite spring configuration 
    private Ignite ignite; 

    public void executeLogic(){ 
     Batch b = batchesToProcess.take(); 
     String cacheName; 
     String key; 
     String value; 
     //process Batch b, get 3 strings 
     //1. cache name 
     //2. key 
     //3. value 
     IgniteCache<String, String> cache = ignite.getOrCreateCache(cacheName); 
     cache.put(key, value); 
    } 

} 

Ich möchte diesen Knoten starten, indem ./ignite.sh _configuration_ mit der angegebenen Konfiguration ausgeführt wird.

Die Frage ist, ich weiß nicht, wie man das schreibt _configuration_, so dass dies ausgeführt werden kann, nur durch die Bereitstellung dieser Konfigurationsdatei ./ignite.sh. Vielleicht sollte ich ContextRefreshedEvent fangen und setzen

Antwort

1

Service Grid kann in diesem Szenario nützlich sein. Erstellen Sie einen Dienst und stellen Sie ihn in der IgniteConfiguration Bean bereit. Es wird beim Start automatisch bereitgestellt.

+0

Sehr guter Punkt, vielen Dank. –

+0

Das ist hier eigentlich schon los, aber trotzdem. Da ignite die Daten in der verteilten Warteschlange gleichmäßig auf alle Knoten verteilt, wie hier angegeben [https://apacheignite.readme.io/docs/queue-and-set#section-collocated-vs-non-collocated-mode] (nicht -collocated mode) Ich möchte den Batch verarbeiten und ** das Ergebnis im Cache auf einen lokalen Knoten ** stellen (um die Seraizierungs- und Netzwerkkosten zu reduzieren). Ist es möglich mit 'IgniteCache' zu ​​tun? –

+2

Ja, es ist möglich, wenn Sie Schlüssel auf den Affinitätsknoten setzen. Am besten senden Sie eine Affinitätsberechnung für den Schlüssel, den Sie speichern möchten. Weitere Informationen finden Sie hier: https://apacheignite.readme.io/docs/affinity-collocation#collocating-compute-with-data – Dmitriy

Verwandte Themen