quarkus集成hazelcast embeded模式自动服务发现

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做缓存,还可以发广播消息,先说这么多吧,不对的地方麻烦指正.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值