Gids voor Hazelcast met Java

1. Overzicht

Dit is een inleidend artikel over Hazelcast waarin we zullen zien hoe je een clusterlid kunt maken, een gedistribueerd Kaart om gegevens tussen de clusterknooppunten te delen en een Java-client te maken om verbinding te maken en gegevens in het cluster op te vragen.

2. Wat is Hazelcast?

Hazelcast is een gedistribueerd In-Memory Data Grid-platform voor Java. De architectuur ondersteunt hoge schaalbaarheid en gegevensdistributie in een geclusterde omgeving. Het ondersteunt de automatische detectie van knooppunten en intelligente synchronisatie.

Hazelcast is verkrijgbaar in verschillende edities. Om de functies voor alle Hazelcast-edities te zien, kunnen we de volgende link raadplegen. In deze zelfstudie gebruiken we de open-sourceeditie.

Evenzo biedt Hazelcast verschillende functies, zoals gedistribueerde gegevensstructuur, gedistribueerde rekenkracht, gedistribueerde zoekopdracht, enz. Voor de toepassing van dit artikel zullen we ons concentreren op een gedistribueerde Kaart.

3. Maven Afhankelijkheid

Hazelcast biedt veel verschillende bibliotheken om aan verschillende vereisten te voldoen. We kunnen ze vinden onder de groep com.hazelcast in Maven Central.

In dit artikel gebruiken we echter alleen de kernafhankelijkheid die nodig is om een ​​zelfstandig Hazelcast-clusterlid en de Hazelcast Java-client te maken:

 com.hazelcast hazelcast 4.0.2 

De huidige versie is beschikbaar in de centrale opslagplaats van maven.

4. Een eerste Hazelcast-applicatie

4.1. Maak een Hazelcast-lid

Leden (ook wel knooppunten genoemd) komen automatisch samen om een ​​cluster te vormen. Deze automatische verbinding vindt plaats met verschillende zoekmechanismen die de leden gebruiken om elkaar te vinden.

Laten we een lid maken dat gegevens opslaat in een door Hazelcast gedistribueerde kaart:

openbare klasse ServerNode {HazelcastInstance hzInstance = Hazelcast.newHazelcastInstance (); ...}

Wanneer we het ServerNode toepassing, kunnen we de doorlopende tekst in de console zien, wat betekent dat we een nieuw Hazelcast-knooppunt in onze JVM maken dat zich bij het cluster moet voegen.

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

Om meerdere knooppunten te maken, kunnen we de meerdere instanties van ServerNode toepassing. Als gevolg hiervan zal Hazelcast automatisch een nieuw lid aanmaken en aan het cluster toevoegen.

Als we bijvoorbeeld het ServerNode applicatie opnieuw, zien we het volgende logboek in de console waarin staat dat er twee leden in het cluster zijn.

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

4.2. Maak een Distributed Kaart

Laten we vervolgens een gedistribueerd Kaart. We hebben de instantie nodig van HazelcastInstance eerder gemaakt om een ​​gedistribueerd Kaart die zich uitstrekt java.util.concurrent.ConcurrentMap koppel.

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

Laten we tot slot enkele vermeldingen toevoegen aan het kaart:

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

Zoals we hierboven kunnen zien, hebben we 10 vermeldingen toegevoegd aan het kaart. We gebruikten FlakeIdGenerator om ervoor te zorgen dat we de unieke sleutel voor de kaart krijgen. Voor meer details over FlakeIdGenerator, kunnen we de volgende link bekijken.

Hoewel dit misschien geen echt voorbeeld is, hebben we het alleen gebruikt om een ​​van de vele bewerkingen te demonstreren die we op de gedistribueerde kaart kunnen toepassen. Later zullen we zien hoe we de vermeldingen die door het clusterlid zijn toegevoegd, kunnen ophalen uit de Hazelcast Java-client.

Intern verdeelt Hazelcast het kaart vermeldingen en verdeelt en repliceert de vermeldingen onder de clusterleden. Voor meer informatie over Hazelcast Kaart, kunnen we de volgende link bekijken.

4.3. Maak een Hazelcast Java-client

Met de Hazelcast-client kunnen we alle Hazelcast-bewerkingen uitvoeren zonder lid te zijn van het cluster. Het maakt verbinding met een van de clusterleden en delegeert alle clusterbrede bewerkingen eraan.

Laten we een native client maken:

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

Zo simpel is het.

4.4. Toegang gedistribueerd Kaart Van Java Client

Vervolgens gebruiken we de instantie van HazelcastInstance eerder gemaakt om toegang te krijgen tot het gedistribueerde Kaart:

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

Nu kunnen we operaties uitvoeren op een kaart zonder lid te zijn van het cluster. Laten we bijvoorbeeld proberen de vermeldingen te herhalen:

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

5. Hazelcast configureren

In dit gedeelte zullen we ons concentreren op het configureren van het Hazelcast-netwerk met behulp van declaratief (XML) en programmatisch (API) en het Hazelcast-beheercentrum gebruiken om actieve knooppunten te bewaken en te beheren.

Terwijl Hazelcast aan het opstarten is, zoekt het naar een hazelcast.config systeemeigenschap. Als het is ingesteld, wordt de waarde ervan als pad gebruikt. Anders zoekt Hazelcast naar een hazelcast.xml bestand in de werkmap of op het klassenpad.

Als geen van bovenstaande werkt, laadt Hazelcast de standaardconfiguratie, d.w.z. hazelcast-default.xml dat komt met hazelcast.jar.

5.1. Netwerk configuratie

Hazelcast gebruikt standaard multicast om andere leden te ontdekken die een cluster kunnen vormen. Als multicast geen geprefereerde manier van ontdekken is voor onze omgeving, dan kunnen we Hazelcast configureren voor een volledig TCP / IP-cluster.

Laten we het TCP / IP-cluster configureren met behulp van declaratieve configuratie:

Als alternatief kunnen we de Java-configuratiebenadering gebruiken:

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

Hazelcast probeert standaard 100 poorten te binden. Als we in het bovenstaande voorbeeld de waarde van poort instellen op 5701 en het aantal poorten beperken tot 20, terwijl leden toetreden tot het cluster, probeert Hazelcast poorten te vinden tussen 5701 en 5721.

Als we ervoor willen kiezen om slechts één poort te gebruiken, kunnen we de functie voor automatisch verhogen uitschakelen door in te stellen automatisch verhogen naar false.

5.2. Management Center-configuratie

Het beheercentrum stelt ons in staat om de algehele status van de clusters te bewaken, we kunnen ook de datastructuren in detail analyseren en doorbladeren, kaartconfiguraties bijwerken en threaddump van knooppunten nemen.

Om het Hazelcast-beheercentrum te gebruiken, kunnen we ofwel het mancenter-versie.oorlog applicatie in onze Java-applicatieserver / -container of we kunnen Hazelcast Management Center starten vanaf de opdrachtregel. We kunnen de nieuwste Hazelcast ZIP downloaden van hazelcast.org. De ZIP bevat de mancenter-versie.oorlog het dossier.

We kunnen onze Hazelcast-knooppunten configureren door de URL van de webapplicatie toe te voegen aan hazelcast.xml en laat vervolgens de Hazelcast-leden communiceren met het managementcentrum.

Laten we nu het beheercentrum configureren met behulp van een declaratieve configuratie:

 // localhost: 8080 / mancenter 

Evenzo is hier de programmatische configuratie:

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

6. Conclusie

In dit artikel hebben we inleidende concepten over Hazelcast behandeld. Voor meer details kunnen we de referentiehandleiding raadplegen.

Zoals gewoonlijk is alle code voor dit artikel beschikbaar op GitHub.