Hazelcast 简明教程

Hazelcast - Client

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)进行配置。

Example

我们使用默认配置,这意味着我们的客户端将能够连接到本地实例。

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

Output

它将生成如下输出:

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

从输出中看到 -

  1. 该集群仅包含一个成员,它来自 Server.java。

  2. 客户端能够访问存储在服务器内的映射。

Load Balancing

Hazelcast 客户端支持使用各种算法进行负载均衡。负载均衡确保负载在成员之间共享,集群中的任何单个成员都不会过载。默认的负载均衡机制设置为循环。使用 config 中的 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>

Failover

在分布式环境中,成员可能任意失败。为了支持故障转移,建议提供多个成员的地址。如果客户端可以访问任何一个成员,那它就能访问到其他成员。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 访问集群的其他成员。