iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
0
Software Development

用30天介紹 open source 專案 Ohara 系列 第 11

Day 11 介紹如何使用 Ohara Configurator 的 Client API

  • 分享至 

  • xImage
  •  

昨天已經介紹了如果使用 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,完整的程式碼可以參考如下連結:

https://github.com/jackyoh/ohara-configurator-client-demo/blob/master/src/test/scala/TestConfiguratorClient.scala

使用 docker ps 指令查看建立服務的結果如下:
https://ithelp.ithome.com.tw/upload/images/20190926/20103456WdS782Ldd4.png

另外要知道更多 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 格式的物件。


上一篇
Day 10 操作 Ohara Configurator Restful API
下一篇
Day 12 Ohara 的 Cluster 在 Kubernetes 平台上執行 (一)
系列文
用30天介紹 open source 專案 Ohara 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言