Hazelcast - 客戶端



Hazelcast 客戶端是 Hazelcast 成員的輕量級客戶端。Hazelcast 成員負責儲存資料和分割槽。它們在傳統的客戶端-伺服器模型中充當伺服器。

Hazelcast 客戶端僅用於訪問儲存在叢集的 Hazelcast 成員中的資料。它們不負責儲存資料,也不承擔任何儲存資料的責任。

客戶端有自己的生命週期,不會影響 Hazelcast 成員例項。

讓我們首先建立 Server.java 並執行它。

import java.util.Map;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
public class Server {
   public static void main(String... args){
      //initialize hazelcast server/instance
      HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance();
      //create a simple map
      Map<String, String> vehicleOwners = hazelcast.getMap("vehicleOwnerMap");
      // add key-value to map
      vehicleOwners.put("John", "Honda-9235");
      // do not shutdown, let the server run
      //hazelcast.shutdown();
   }
}

現在,執行上面的類。

java -cp .\target\demo-0.0.1-SNAPSHOT.jar com.example.demo.Server

要設定客戶端,我們還需要新增客戶端 jar。

<dependency>
   <groupId>com.hazelcast</groupId>
   <artifactId>hazelcast-client</artifactId>
   <version>3.12.12</version>
</dependency>

現在讓我們建立 Client.java。請注意,與 Hazelcast 成員類似,客戶端也可以透過程式設計方式或透過 XML 配置進行配置(即,透過 -Dhazelcast.client.config 或 hazelcast-client.xml)。

示例

讓我們使用預設配置,這意味著我們的客戶端能夠連線到本地例項。

import java.util.Map;
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.core.HazelcastInstance;
public class Client {
   public static void main(String... args){
      //initialize hazelcast client
      HazelcastInstance hzClient = HazelcastClient.newHazelcastClient();
      //read from map
      Map<String, String> vehicleOwners = hzClient.getMap("vehicleOwnerMap");
      System.out.println(vehicleOwners.get("John"));
      System.out.println("Member of cluster: " +
      hzClient.getCluster().getMembers());
      // perform shutdown
      hzClient.getLifecycleService().shutdown();
   }
}

現在,執行上面的類。

java -cp .\target\demo-0.0.1-SNAPSHOT.jar com.example.demo.Client

輸出

它將產生以下輸出:

Honda-9235
Member of cluster: [Member [localhost]:5701 - a47ec375-3105-42cd-96c7-fc5eb382e1b0]

從輸出中可以看到:

  • 叢集僅包含 1 個成員,來自 Server.java。

  • 客戶端能夠訪問儲存在伺服器內的對映。

負載均衡

Hazelcast 客戶端支援使用各種演算法進行負載均衡。負載均衡確保負載在成員之間共享,並且叢集中沒有單個成員過載。預設的負載均衡機制設定為輪詢。可以透過在配置中使用 loadBalancer 標籤來更改它。

我們可以在配置中使用 load-balancer 標籤指定負載均衡器的型別。以下是一個選擇隨機選擇節點的策略的示例。

<hazelcast-client xmlns="http://www.hazelcast.com/schema/client-config"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.hazelcast.com/schema/client-config
   http://www.hazelcast.com/schema/client-config/hazelcastclient-config-4.2.xsd">
      <load-balancer type="random"/>
</hazelcast-client>

故障轉移

在分散式環境中,成員可能會任意失敗。為了支援故障轉移,建議提供多個成員的地址。如果客戶端可以訪問任何一個成員,那麼它就足以將其定址到其他成員。引數 addressList 可以在客戶端配置中指定。

例如,如果我們使用以下配置:

<hazelcast-client xmlns="http://www.hazelcast.com/schema/client-config"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.hazelcast.com/schema/client-config
   http://www.hazelcast.com/schema/client-config/hazelcastclient-config-4.2.xsd">
   <address-list>machine1, machine2</address-list>
</hazelcast-client>

即使,比如說,machine1 宕機,客戶端也可以使用 machine2 訪問叢集的其他成員。

廣告

© . All rights reserved.