Anleitung zum Hazelcast mit Java

Anleitung zu Hazelcast mit Java

1. Überblick

Dies ist ein Einführungsartikel zu Hazelcast, in dem wir erläutern, wie Sie ein Clustermitglied erstellen,Map verteilen, umMap Daten auf die Clusterknoten zu verteilen, und einen Java-Client erstellen, um Daten im Cluster zu verbinden und abzufragen .

2. Was ist Hazelcast?

Hazelcast ist eine verteilte In-Memory Data Grid-Plattform für Java. Die Architektur unterstützt eine hohe Skalierbarkeit und Datenverteilung in einer Clusterumgebung. Es unterstützt die automatische Erkennung von Knoten und die intelligente Synchronisation. Um die Funktionen für alle Hazelcast-Editionen anzuzeigen, können Sie auf die folgendenlink verweisen.

Hazelcast ist in verschiedenen Editionen erhältlich. Die Liste der verfügbaren Hazelcast-Editionen finden Sie in den folgendenhttp://docs.hazelcast.org/docs/latest/manual/html-single/index.html#hazelcast-editions. [Link]. Für den Zweck dieses Artikels konzentrieren wir uns auf die Open-Source-Ausgabe von Hazelcast.

Ebenso bietet Hazelcast verschiedene Funktionen wie verteilte Datenstruktur, verteiltes Rechnen, verteilte Abfrage usw. In diesem Artikel konzentrieren wir uns auf verteilteMap.

3. Maven-Abhängigkeiten

Hazelcast bietet je nach Nutzung verschiedene Bibliotheken an. Wir können Maven-Abhängigkeiten unter Gruppecom.hazelcast in Maven Central finden.

In diesem Artikel konzentrieren wir uns auf Abhängigkeiten, die zum Erstellen eines eigenständigen Hazelcast-Clustermitglieds und des Hazelcast-Java-Clients erforderlich sind.

3.1. Hazelcast-Cluster-Mitglied

Wir müssen die Hazelcast-Abhängigkeit in pom.xml wie folgt hinzufügen:


    com.hazelcast
    hazelcast
    3.7.2

Die Abhängigkeit ist inmaven central repository verfügbar.

3.2. Hazelcast Java Client

Neben der Hazelcast-Kernabhängigkeit müssen wir auch die Clientabhängigkeit einbeziehen:


    com.hazelcast
    hazelcast-client
    3.7.2

Die Abhängigkeit ist inmaven central repository verfügbar.

4. Ihre erste Hazelcast-Anwendung

4.1. Hazelcast-Mitglied erstellen

Mitglieder (auch Knoten genannt) schließen sich automatisch zu einem Cluster zusammen. Diese automatische Verknüpfung erfolgt mit verschiedenen Erkennungsmechanismen, mit denen sich die Mitglieder gegenseitig finden.

Erstellen wir ein Mitglied, das Daten in einer verteilten Hazelcast-Karte speichert:

public class ServerNode {

    HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance();
    ...
}

Wenn wir die AnwendungServerNodetarten, sehen wir den fließenden Text in der Konsole. Dies bedeutet, dass wir in unserer JVM einen neuen Hazelcast-Knoten erstellen, der dem Cluster beitreten muss.

Members [1] {
    Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c this
}

Um mehrere Knoten zu erstellen, können wir die mehreren Instanzen der AnwendungServerNodetarten. Hazelcast erstellt automatisch ein neues Mitglied und fügt es dem Cluster hinzu.

Wenn wir beispielsweise die AnwendungServerNodeerneut ausführen, wird in der Konsole das folgende Protokoll angezeigt, das besagt, dass sich zwei Mitglieder im Cluster befinden.

Members [2] {
  Member [192.168.1.105]:5701 - 899898be-b8aa-49aa-8d28-40917ccba56c
  Member [192.168.1.105]:5702 - d6b81800-2c78-4055-8a5f-7f5b65d49f30 this
}

4.2. Erstellen Sie verteilteMap

Als nächstes erstellen wir ein verteiltesMap.. Wir benötigen die zuvor erstellte Instanz vonHazelcastInstance, um ein verteiltesMap zu erstellen, das diejava.util.concurrent.ConcurrentMap-Schnittstelle erweitert.

Map map = hazelcastInstance.getMap("data");
...

Fügen wir denmap einige Einträge hinzu:

IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid");
for (int i = 0; i < 10; i++) {
    map.put(idGenerator.newId(), "message" + 1);
}

Wie wir oben sehen können, haben wir 10 Einträge inmap hinzugefügt. Wir habenIdGenerator verwendet, um sicherzustellen, dass wir den eindeutigen Schlüssel für die Karte erhalten. Weitere Informationen zuIdGenerator finden Sie in den folgendenlink.

Dies ist möglicherweise nicht das reale Beispiel, es wird jedoch nur verwendet, um eine der vielen Operationen zu veranschaulichen, die wir auf die verteilte Karte anwenden können. Im späteren Abschnitt erfahren Sie, wie Sie die vom Clustermitglied hinzugefügten Karteneinträge vom Hazelcast-Java-Client abrufen können.

Intern partitioniert Hazelcast die Einträge vonmapund verteilt und repliziert die Einträge unter den Clustermitgliedern. Weitere Informationen zu HazelcastMap finden Sie in den folgendenlink.

4.3. Erstellen Sie einen Hazelcast Java Client

Mit Hazelcast Client können wir alle Hazelcast-Vorgänge ausführen, ohne Mitglied des Clusters zu sein. Es stellt eine Verbindung zu einem der Cluster-Mitglieder her und delegiert alle clusterweiten Vorgänge an dieses.

Erstellen wir einen nativen Client:

ClientConfig config = new ClientConfig();
GroupConfig groupConfig = config.getGroupConfig();
groupConfig.setName("dev");
groupConfig.setPassword("dev-pass");
HazelcastInstance hzClient
  = HazelcastClient.newHazelcastClient(config);

Der Standardbenutzername und das Standardkennwort für den Zugriff auf den Cluster sinddev unddev-pass. Weitere Informationen zum Hazelcast-Client finden Sie in den folgendenlink.

4.4. Zugriff auf verteilteMap über den Java-Client

Als nächstes greifen wir auf die verteiltenMapzu, die wir zuvor erstellt haben. Wir benötigen die zuvor erstellte Instanz vonHazelcastInstance, um auf die verteiltenMap. zuzugreifen

IMap map = hzClient.getMap("data");
...

Jetzt können wir Operationen mitmap ausführen, ohne Mitglied des Clusters zu sein. Versuchen wir beispielsweise, die vom Clustermitglied hinzugefügten Karteneinträge zu durchlaufen:

for (Entry entry : map.entrySet()) {
    ...
}

5. Hazelcast konfigurieren

In diesem Abschnitt wird erläutert, wie Sie das Hazelcast-Netzwerk deklarativ (XML) und programmgesteuert (API) konfigurieren und das Hazelcast Management Center verwenden, um ausgeführte Knoten zu überwachen und zu verwalten.

Während Hazelcast gestartet wird, wird nach der Systemeigenschaft vonhazelcast.configgesucht. Wenn es gesetzt ist, wird sein Wert als Pfad verwendet. Wenn die obige Systemeigenschaft nicht festgelegt ist, prüft Hazelcast, ob sich im Arbeitsverzeichnis einehazelcast.xml-Datei befindet.

Wenn nicht, wird geprüft, obhazelcast.xml im Klassenpfad vorhanden ist. Wenn keines der oben genannten Verfahren funktioniert, lädt Hazelcast die Standardkonfiguration, d. H.

Wenn keines der oben genannten Verfahren funktioniert, lädt Hazelcast die Standardkonfiguration, d. H. hazelcast-default.xml, die mithazelcast.jar. geliefert werden

5.1. Netzwerkkonfiguration

Standardmäßig verwendet Hazelcast Multicast, um andere Mitglieder zu ermitteln, die einen Cluster bilden können. Wenn Multicast für unsere Umgebung kein bevorzugter Erkennungsweg ist, können wir Hazelcast für einen vollständigen TCP / IP-Cluster konfigurieren.

Konfigurieren Sie den TCP / IP-Cluster mithilfe der deklarativen Konfiguration:



    
        5701
        
            
        
        
            machine1
        localhost
        
        
    

und programmatische Konfiguration:

Config config = new Config();
NetworkConfig network = config.getNetworkConfig();
network.setPort(5701).setPortCount(20);
network.setPortAutoIncrement(true);
JoinConfig join = network.getJoin();
join.getMulticastConfig().setEnabled(false);
join.getTcpIpConfig()
  .addMember("machine1")
  .addMember("localhost").setEnabled(true);

Standardmäßig versucht Hazelcast, 100 Ports zu binden. Wenn wir im obigen Beispiel den Wert von port auf 5701 setzen und die Anzahl der Ports auf 20 begrenzen, während Mitglieder dem Cluster beitreten, versucht Hazelcast, Ports zwischen 5701 und 5721 zu finden.

Wenn Sie nur einen Port verwenden möchten, können Sie die automatische Inkrementierungsfunktion eines Ports deaktivieren, indem Sieauto-increment auffalse setzen.

5.2. Management Center-Konfiguration

Mit dem Management Center können wir den Gesamtstatus von Clustern überwachen, Ihre Datenstrukturen detailliert analysieren und durchsuchen, Zuordnungskonfigurationen aktualisieren und Thread-Dumps von Knoten abrufen.

Um das Hazelcast Management Center zu verwenden, können wir entweder die Anwendungmancenter-version.warauf unserem Java-Anwendungsserver / -container bereitstellen oder das Hazelcast Management Center über die Befehlszeile starten. Wir können die neueste Hazelcast-ZIP vonhazelcast.org herunterladen. Die ZIP-Datei enthält die Dateimancenter-version.war.

Wir können unsere Hazelcast-Knoten konfigurieren, indem wir die URL der Webanwendung zuhazelcast.xml hinzufügen und dann die Hazelcast-Mitglieder mit dem Management Center kommunizieren lassen.

Konfigurieren Sie das Management Center mithilfe der deklarativen Konfiguration:


    http://localhost:8080/mancenter

und programmatische Konfiguration:

ManagementCenterConfig manCenterCfg = new ManagementCenterConfig();
manCenterCfg.setEnabled(true).setUrl("http://localhost:8080/mancenter");

6. Fazit

In diesem Artikel haben wir einführende Konzepte zu Hazelcast behandelt. Für Details können Sie sich dieReference Manual ansehen.

Sie finden den Quellcode für diesen Artikelover on GitHub.