Anleitung zu Hazelcast mit Java

1. Übersicht

In diesem Einführungsartikel zu Hazelcast erfahren Sie, wie Sie ein Clustermitglied erstellen, eine verteilte Zuordnung , um Daten zwischen den Clusterknoten freizugeben, 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.

Hazelcast ist in verschiedenen Editionen erhältlich. Um die Funktionen für alle Hazelcast-Editionen anzuzeigen, können Sie auf den folgenden Link verweisen. In diesem Tutorial verwenden wir die Open-Source-Edition.

Ebenso bietet Hazelcast verschiedene Funktionen wie verteilte Datenstruktur, verteilte Datenverarbeitung, verteilte Abfrage usw. In diesem Artikel konzentrieren wir uns auf eine verteilte Karte .

3. Maven-Abhängigkeit

Hazelcast bietet viele verschiedene Bibliotheken, um verschiedene Anforderungen zu erfüllen. Wir finden sie unter com.hazelcast group in Maven Central.

In diesem Artikel wird jedoch nur die Kernabhängigkeit verwendet, die zum Erstellen eines eigenständigen Hazelcast-Clustermitglieds und des Hazelcast Java-Clients erforderlich ist:

 com.hazelcast hazelcast 4.0.2  

Die aktuelle Version ist im zentralen Maven-Repository verfügbar.

4. Eine erste Hazelcast-Anwendung

4.1. Erstellen Sie ein Hazelcast-Mitglied

Mitglieder (auch Knoten genannt) verbinden sich automatisch zu einem Cluster. 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 ServerNode- Anwendung starten , 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 Sie mehrere Instanzen der ServerNode- Anwendung starten . Infolgedessen erstellt Hazelcast automatisch ein neues Mitglied und fügt es dem Cluster hinzu.

Wenn wir beispielsweise die ServerNode- Anwendung erneut 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 eine verteilte Karte

Als nächstes erstellen wir eine verteilte Karte. Wir benötigen die zuvor erstellte Instanz von HazelcastInstance , um eine verteilte Map zu erstellen, die die Schnittstelle java.util.concurrent.ConcurrentMap erweitert .

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

Zum Schluss fügen wir der Karte einige Einträge hinzu :

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

Wie wir oben sehen können, haben wir der Karte 10 Einträge hinzugefügt . Wir haben FlakeIdGenerator verwendet, um sicherzustellen, dass wir den eindeutigen Schlüssel für die Karte erhalten. Weitere Informationen zu FlakeIdGenerator finden Sie unter folgendem Link.

Obwohl dies möglicherweise kein reales Beispiel ist, haben wir es nur verwendet, um eine der vielen Operationen zu demonstrieren, die wir auf die verteilte Karte anwenden können. Später erfahren Sie, wie Sie die vom Clustermitglied hinzugefügten Einträge vom Hazelcast Java-Client abrufen.

Intern partitioniert Hazelcast die Karteneinträge und verteilt und repliziert die Einträge unter den Clustermitgliedern. Weitere Informationen zur Hazelcast- Karte finden Sie unter folgendem Link.

4.3. Erstellen Sie einen Hazelcast Java Client

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

Erstellen wir einen nativen Client:

ClientConfig config = new ClientConfig(); config.setClusterName("dev"); HazelcastInstance hazelcastInstanceClient = HazelcastClient.newHazelcastClient(config); 

So einfach ist das.

4.4. Greifen Sie über den Java-Client auf die verteilte Karte zu

Als Nächstes verwenden wir die zuvor erstellte Instanz von HazelcastInstance , um auf die verteilte Map zuzugreifen :

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

Jetzt können wir Operationen auf einer Karte ausführen, ohne Mitglied des Clusters zu sein. Versuchen wir beispielsweise, die Einträge zu durchlaufen:

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

5. Hazelcast konfigurieren

In diesem Abschnitt konzentrieren wir uns darauf, wie Sie das Hazelcast-Netzwerk deklarativ (XML) und programmgesteuert (API) konfigurieren und das Hazelcast Management Center zum Überwachen und Verwalten laufender Knoten verwenden.

Während des Starts von Hazelcast wird nach einer Systemeigenschaft für hazelcast.config gesucht . Wenn es festgelegt ist, wird sein Wert als Pfad verwendet. Andernfalls sucht Hazelcast im Arbeitsverzeichnis oder im Klassenpfad nach einer Datei hazelcast.xml .

If none of the above works, Hazelcast loads the default configuration, i.e. hazelcast-default.xml that comes with hazelcast.jar.

5.1. Network Configuration

By default, Hazelcast uses multicast for discovering other members that can form a cluster. If multicast isn't a preferred way of discovery for our environment, then we can configure Hazelcast for a full TCP/IP cluster.

Let's configure the TCP/IP cluster using declarative configuration:


    

Alternatively, we can use the Java config approach:

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);

By default, Hazelcast will try 100 ports to bind. In the example above, if we set the value of port as 5701 and limit the port count to 20, as members are joining the cluster, Hazelcast tries to find ports between 5701 and 5721.

If we want to choose to use only one port, we can disable the auto-increment feature by setting auto-increment to false.

5.2. Management Center Configuration

The management center allows us to monitor the overall state of the clusters, we can also analyze and browse the data structures in detail, update map configurations, and take thread dump from nodes.

To use the Hazelcast management center, we can either deploy the mancenter-version.war application into our Java application server/container or we can start Hazelcast Management Center from the command line. We can download the latest Hazelcast ZIP from hazelcast.org. The ZIP contains the mancenter-version.war file.

We can configure our Hazelcast nodes by adding the URL of the web application to hazelcast.xml and then have the Hazelcast members communicate with the management center.

So let's now configure the management center using declarative configuration:

 //localhost:8080/mancenter 

Likewise, here's the programmatic configuration:

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

6. Conclusion

In this article, we covered introductory concepts about Hazelcast. For more details, we can take a look at the Reference Manual.

As usual, all the code for this article is available over on GitHub.