github有个quarkus-hazelcast-client拓展,看了下这个是适用于server/client模式的hazelcast客户端,这里主要讲讲如何集成embeded模式.
embeded模式有个好处就是去中心化,不需要单独部署,每个服务都可以作为服务端.
maven引入jar包
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
</dependency>
项目引入这个jar包,会自动去src/main/resources/下找hazelcast.xml或者hazelcast.yml,我这里用的是hazelcast.yml,起始两种配置是一样的,是可以互相转换的,映射的是同一套配置对象.官方网站能找到完整配置(https://github.com/hazelcast/hazelcast/blob/5.2.z/hazelcast/src/main/resources/hazelcast-full-example.yaml),里面都有注释.如果有分环境对应不同配置文件,可以使用import配置,指向不同文件,$符号可以直接取env中变量.
本地运行配置
hazelcast:
cluster-name: mycluster
security:
enabled: false
network:
join:
multicast:
enabled: true
kubernetes:
enabled: false
接下来定义hazelcast实例,
Hazelcast.newHazelcastInstance();
注意这个方法调用一次就行了,调用多次就会有多个member.
集群成员变动的事件监听,有两种方式绑定,第一种直接在hazelcast.yml中加上listeners指向你自定义的MembershipListener实现类,第二种是手动绑定,
hazelcastInstance.getCluster().addMembershipListener(clusterMembershipListener);
第一种比较监听比较及时,可以监听到自身加入集群的事件,但是这种只能实现基本的打印操作,不能注入我们自定义的对象,因为初始化不是我们控制的,只能调默认构造器.我采用的是第二种,可以在初始化时,注入自己的对象,控制成员变更处理逻辑.
如果是本地,hazelcast配成multicast模式即可,我这里遇到一个问题,就是开着公司vpn的时候,集群没生效,始终只有自己一个成员,所以本地调试的时候,最好还是关掉vpn之类的软件,避免干扰.如果是部署到k8s里面,kubernetes的开关需要打开,同时加上service-dns,这里配成k8s服务的headless的dns地址,实际上这里有两种配置,我这里只有dns方式试成功了.api的方式需要开启rolebinding,让api可以调成功.
Since version 5.0 hazelcast includes hazelcast-kubernetes,5.0版本以后不需要引入kubernates插件包了,因为官方包里面包含了.
hazelcast功能还是很强大的,可以替代redis做缓存,还可以发广播消息,先说这么多吧,不对的地方麻烦指正.