es4x的集群配置详解

原创
2020/04/12 00:57
阅读数 2.1K

偶然机会发现了es4x,尝试写了点自己原来写的业务。发现开发效率要比kotlin还高。更欢喜的是,终于不用忍受idea的慢与卡顿了。但是,开心之余,我发现es4x不用使用setClusterManager来配置集群管理器。熟悉vert.x的同学知道,vert.x可以通过setClusterManager来设置集群管理器,以获取分布式锁,分布式map,甚至分布式的session……

嗯,既然es4x没有开放setClusterManager的接口,那么还有其它法子来实现这一功能么?我翻看了vert.x的官方文档(我是使用zookeeper,其它的clusterManager请自行参考文档)

https://vertx.io/docs/vertx-zookeeper/java/

在 《Using this cluster manager》和《Configuring this cluster manager》中,发现,classpath中,只要有vertx-zookeeper-3.9.0.jar,就可以通过zookeeper.json来自动配置。这一点,我使用了官方的vertx命令来试了。确实如此。对于这个,你们可以自行下载尝试。

通过查看,es4x代码,它也继续承于vert.x的Launcher。

class ES4X extends Launcher

所以剩下的问题,是如何将vertx-zookeeper的jar放入esc环境里。我尝试了es4x run -cp 这些,都是不行的。 在这个网站上 https://www.cnblogs.com/rongfengliang/p/11906794.html 找到了灵感。原来,第三方的jar包需要通过 es4x install -v加入。

如果是多个jar包需要使用,分开。见代码

 public void setVendor(String vendor) {
    if (vendor != null) {
      this.vendor = new ArrayList<>();
      for (String v : vendor.split(",")) {
        // the jar lives in node_modules/.bin (rebase to the project root)
        this.vendor.add(".." + File.separator + ".." + File.separator + v);
      }
    }
  }

上面废话这么多。现在提供保姆级的教程(以zookeeper为例)

1、获取 vertx-zookeeper的依赖jar包。

使用idea新建一个空白的java的gradle工程,将build.gradle修改如下

plugins {
    id 'java'
    id 'application'
}

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8
mainClassName="com.huoyaojing.server.main"
repositories {
    mavenCentral()
}

dependencies {
    compile "io.vertx:vertx-zookeeper:3.9.0"
    compile "com.google.guava:guava:27.1-jre"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

按图来操作

2、将解压的zip包中的lib放到您自己的es4x工程中,并生成新的es4x-launcher.jar

然后执行命令

es4x install -v  lib/animal-sniffer-annotations-1.17.jar,lib/audience-annotations-0.5.0.jar,lib/checker-qual-2.5.2.jar,lib/curator-client-2.13.0.jar,lib/curator-framework-2.13.0.jar,lib/curator-recipes-2.13.0.jar,lib/error_prone_annotations-2.2.0.jar,lib/failureaccess-1.0.1.jar,lib/guava-28.2-jre.jar,lib/j2objc-annotations-1.1.jar,lib/jline-0.9.94.jar,lib/jsr305-3.0.2.jar,lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar,lib/log4j-1.2.17.jar,lib/netty-3.10.6.Final.jar,lib/slf4j-api-1.7.25.jar,lib/slf4j-log4j12-1.7.21.jar,lib/untitled-1.0-SNAPSHOT.jar,lib/vertx-zookeeper-3.9.0.jar,lib/zookeeper-3.4.13.jar

为了方便,我写了一小段python代码。这里也贡献给大家

import os

jarList = os.listdir('./lib')
jarList = ['lib/' + jar for jar in jarList]

cmd = 'es4x install -v  ' + ','.join(jarList)
os.system(cmd)

3、编写zookeepr配置,并修改package.json

新建一个conf目录,并在其目录下,生成一个zookeeper.json

{
    "zookeeperHosts":"127.0.0.1",
    "sessionTimeout":20000,
    "connectTimeout":3000,
    "rootPath":"io.vertx",
    "retry": {
      "initialSleepTime":100,
      "intervalTimes":10000,
      "maxTimes":5
    }
  }

最后修改 package.json中的 start为 '"es4x -cp=./conf --cluster"'

另外一个小技巧,可以使用jd-gui 查看node_modules/.bin/es4x-launcher.jar 依赖是否添加成功

展开阅读全文
加载中

作者的其它热门文章

打赏
1
0 收藏
分享
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部