More Related Content Similar to Gws 20131018 vertx_handson(updated) (20) More from Nobuhiro Sue (20) Gws 20131018 vertx_handson(updated)2. 自己紹介
須江 信洋(すえ のぶひろ)
Twitter: @nobusue
https://www.facebook.com/nobuhiro.sue
約10年ほどJavaEE関連の仕事をしてます
2013年10月よりフリーランス(個人事業主)
G*(Groovy関連技術)との関わり
2
JGGUGサポートスタッフ
「プログラミングGROOVY」執筆チーム
「Groovy イン・アクション」翻訳チーム
3. Today’s Agenda
Vert.x インストール
Vert.x 概要 / ユースケース
Vert.x ハンズオン
3
echo
HTTP / WebSockets
Event Bus
Vert.x module / echo with CRaSH
参考情報
4. Vert.xインストール
前提
JDK1.7以上 (“java –version”で確認)
curl -s get.gvmtool.net | bash
gvm install vertx
詳細は http://gvmtool.net/ 参照
Windowsの場合はcygwinが必要
GVM利用
ZIPを展開
4
http://vertx.io/downloads.html
2.0.2.finalが最新(2013/10/17現在)
適当なディレクトリに展開 ($VERTX_HOME)
$VERTX_HOME/bin にパスを通しておく
7. Vert.x の特徴
Polyglot
多数のJVM言語をサポート(混在可)
Simplicity
スレッドセーフ、抽象化、モジュール化
Scalability
イベントバス、クラスター
Concurrency
非同期(non-blocking)、イベントループ
7
12. ユースケース(例)
WebSocket / SockJS Server
イベント処理ゲートウェイ
スマホアプリへのリアルタイムデータ配信(為替とか)
大量の双方向メッセージ(チャットとか)
Internet of Things
サーバーファームからのログ収集(fluentdとか)
Complex Event Processing
高性能ネットワーククライアント
負荷テストクライアント(beyond JMeter)
Web Scraping / Test Automation
12
15. echo
vertx run echo/EchoServer.groovy
telnet localhost 1234
何か入力してみてください
抜けるときは Ctrl + ] -> quit
vertx run echo/EchoClient.groovy
EchoServer.groovyを実行したままで
“hello”を10回送信
非同期で送信されていることに注目
15
22. SockJSExample.groovy
def server = vertx.createHttpServer()
server.requestHandler { req ->
if (req.uri == "/") req.response.sendFile
'sockjs/index.html'
}
vertx.createSockJSServer(server).installApp(prefix:
'/testapp') { sock ->
sock.dataHandler { buff ->
sock << buff
}
}
server.listen(8080)
22
24. Receiver.groovy / Sender.groovy
def eb = vertx.eventBus
eb.registerHandler("news-feed", { message ->
println "Received news: ${message.body()}"
})
def eb = vertx.eventBus
// Send a message every second
vertx.setPeriodic(1000) {
eb.publish("news-feed", "Some news!")
}
24
28. Cluster構成時のログ
[127.0.0.1]:5701 [dev] 5701 is accepting socket
connection from /127.0.0.1:51668
[127.0.0.1]:5701 [dev] 5701 accepted socket
connection from /127.0.0.1:51668
Received news: Some news!
[127.0.0.1]:5701 [dev]
Members [3] {
Member [127.0.0.1]:5701 this
Member [127.0.0.1]:5702
Member [127.0.0.1]:5703
}
28
29. Event Bus(point to point)
vertx run
eventbus_pointtopoint/Receiver.groovy
-cluster
vertx run
eventbus_pointtopoint/Receiver.groovy
-cluster
vertx run
eventbus_pointtopoint/Sender.groovy
-cluster
メッセージはラウンドロビンで届く
29
30. Receiver.groovy / Sender.groovy
def eb = vertx.eventBus
eb.registerHandler("ping-address", { message ->
println "Received message: ${message.body()}"
message.reply("pong!")
})
def eb = vertx.eventBus
vertx.setPeriodic(1000) {
eb.send("ping-address", "ping!", { reply ->
println "Received reply ${reply.body()}"
})
}
30
31. fanout (Shared memory)
vertx run fanout/FanoutServer.groovy
telnet localhost 1234
terminalを複数開いて試してみてください
抜けるときは Ctrl + ] -> quit
Shared Set/Map
同一Vert.xインスタンス上のvertileからのみ参照可能
な共有メモリ
同一JVM上でのみ有効(クラスター対応の計画あり)
31
32. FanoutServer.groovy
def conns = vertx.sharedData.getSet('conns')
def eb = vertx.eventBus
server = vertx.createNetServer().connectHandler
{ socket ->
conns << socket.writeHandlerID
socket.dataHandler { data ->
for (id in conns) { eb.send(id, data) }
}
socket.closeHandler
{ conns.remove(socket.writeHandlerID) }
}.listen(1234)
32
35. echo with CRaSH module
適当なディレクトリにEchoWithCrash.groovyを
作成
vertx run EchoWithCrash.groovy
CRaSH moduleがインストールされる
CRaSHのSSHサーバーが実行される
ssh –p 2000 admin@localhost
password: admin
35