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 客户端支持使用各种算法进行负载平衡。负载均衡确保s 负载在成员之间共享,并且集群中没有单个成员过载。默认负载平衡机制设置为循环。可以通过使用配置中的 loadBalancer 标记来更改相同的内容。
我们可以使用配置中的负载均衡器标签来指定负载均衡器的类型。这是一个选择随机选取节点的策略的示例。
<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>
即使机器 1 出现故障,客户端也可以使用机器 2 访问集群的其他成员。