昨天已經介紹了如果使用 Ohara 的 Configurator Restful API 來建立 Node、Zookeeper Cluster 和 Broker Cluster,在使用上需要知道 Restful API 的 URL 路徑以及要傳入的 JSON 資料格式,所以在使用上沒有那麼的直覺。Ohara 有將 Configurator Restful API 封裝成 jar 檔,可以透過寫程式的方式來呼叫 Ohara Configurator Restful API,使用上就會比較直覺和簡單一點另外也可以提高版本的相容性,目前可以使用的程式語言是 Scala。
今天的分享主要是透過撰寫 Scala 的程式碼,來連到 Ohara Configurator Restful API,然後建立 Node、Zookeeper Cluster、Broker Cluster 和 Worker Cluster 最後再使用 docker 的指令去查詢服務被建立的結果。
在使用 Ohara Configurator WebUI 之前需要先建立 build.gradle 的檔案,如下:
apply plugin: 'scala'
sourceCompatibility = 1.8
repositories {
mavenCentral()
maven {
url "https://dl.bintray.com/oharastream/ohara"
}
}
tasks.withType(JavaCompile){
options.encoding = 'UTF-8'
}
tasks.withType(Javadoc){
options.encoding = 'UTF-8'
}
dependencies {
compile 'org.scala-lang:scala-library:2.12.9'
compile 'com.typesafe.akka:akka-http_2.12:10.1.3'
compile 'junit:junit:4.12'
compile 'com.typesafe.akka:akka-http-spray-json_2.12:10.1.3'
compile 'com.island.ohara:ohara-configurator:0.7.1'
compile 'com.island.ohara:ohara-client:0.7.1'
compile 'com.island.ohara:ohara-common:0.7.1'
}
以上是 gradle 的設定檔,最主要會引入 Ohara 的一些 jar 檔,像是 configurator、client 和 common 的模組,另外 Ohara 的 http client 和 json 字串的轉換是使用 akka 開發,所以也需要將 akka 的 library 引入到 build.gradle 的設定裡面。
建立 Node 和建立 Zookeeper Cluster 的 Scala 程式如下:
val configurator = Configurator.builder
.hostname("192.168.56.103")
.port(12345)
.build()
val nodes: Seq[Node] = Seq(Node(
hostname = "192.168.56.103",
port = Some(22),
user = Some("ohara"),
password = Some("oharastream"),
services = Seq.empty,
lastModified = System.currentTimeMillis,
validationReport = None,
tags = Map.empty
))
// Create Node
val nodeApi = NodeApi.access.hostname(configurator.hostname).port(configurator.port)
nodes.foreach { node =>
result(nodeApi.request.hostname(node.hostname).port(node._port).user(node._user)
.password(node._password).create())
}
// Create and start Zookeeper Cluster
val zkClusterName: String = "zk"
result(zkApi.request
.name(zkClusterName)
.clientPort(CommonUtils.availablePort)
.electionPort(CommonUtils.availablePort)
.peerPort(CommonUtils.availablePort)
.nodeNames(Set(nodes.head.hostname))
.create())
result(zkApi.start(zkClusterName))
以上的程式碼主要會使用 Configurator 的 Client API 去呼叫建立 Node 和 Zookeeper Cluster,建立完成之後就可以把 Zookeeper Cluster 的服務 start,完整的程式碼可以參考如下連結:
使用 docker ps 指令查看建立服務的結果如下:
另外要知道更多 Configurator Client API 的使用方法也可以參考 Ohara 的測試程式,如下連結:
https://github.com/oharastream/ohara/blob/master/ohara-it/src/test/scala/com/island/ohara/it/agent/BasicTests4Collie.scala
今天介紹使用 Configurator Client API 另外一個使用情境會是在撰寫整合測試程式可以更加的方便呼叫 Ohara Configurator 的 Restful API,不用再另外去使用 HttpClient 呼叫 Restful API 的 URL 以及組一大堆的 JSON 格式的物件。