- Hazelcast 教程
- Hazelcast - 首页
- Hazelcast - 简介
- Hazelcast - 设置
- Hazelcast - 第一个应用程序
- Hazelcast - 配置
- 设置多节点实例
- Hazelcast - 数据结构
- Hazelcast - 客户端
- Hazelcast - 序列化
- Hazelcast 高级
- Hazelcast - Spring 集成
- Hazelcast - 监控
- Map Reduce & 聚合
- Hazelcast - 集合监听器
- 常见陷阱 & 性能提示
- Hazelcast 有用资源
- Hazelcast - 快速指南
- Hazelcast - 有用资源
- Hazelcast - 讨论
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 访问集群的其他成员。