Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
MU
Uploaded by
Masashi Umezawa
PDF, PPTX
421 views
Tarantubeでメッセージキューを使い倒す
Pharoで使える軽量で高機能なMQライブラリのTarantubeの解説
Software
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 29
2
/ 29
3
/ 29
4
/ 29
5
/ 29
6
/ 29
7
/ 29
8
/ 29
9
/ 29
10
/ 29
11
/ 29
12
/ 29
13
/ 29
14
/ 29
15
/ 29
16
/ 29
17
/ 29
18
/ 29
19
/ 29
20
/ 29
21
/ 29
22
/ 29
23
/ 29
24
/ 29
25
/ 29
26
/ 29
27
/ 29
28
/ 29
29
/ 29
More Related Content
PDF
NanoStrand
by
Masashi Umezawa
PDF
リトライでtime.Sleepを使ったら積んだ話
by
ssuser329cba
PDF
Scapy presentation Remake(訂正)
by
ashigirl ZareGoto
PDF
明日から使える気になるGo言語による並行処理
by
Yuto Matsukubo
PPTX
C++のビルド高速化について
by
AimingStudy
PDF
Lagopusとvagrant
by
Masaru Oki
PDF
import dpkt したよ #ssmjp 2014/02/28
by
th0x0472
PDF
Ruby&Active Support for expert 3
by
xibbar
NanoStrand
by
Masashi Umezawa
リトライでtime.Sleepを使ったら積んだ話
by
ssuser329cba
Scapy presentation Remake(訂正)
by
ashigirl ZareGoto
明日から使える気になるGo言語による並行処理
by
Yuto Matsukubo
C++のビルド高速化について
by
AimingStudy
Lagopusとvagrant
by
Masaru Oki
import dpkt したよ #ssmjp 2014/02/28
by
th0x0472
Ruby&Active Support for expert 3
by
xibbar
What's hot
PDF
Python vs ruby
by
osamunmun
PDF
ちょっと古いマシンにLinuxを
by
Kenichiro MATOHARA
PDF
Raspberry Piにdiskless modeのalpine linuxを導入してみる
by
Kenichiro MATOHARA
PPTX
ParliamentでGeoSPARQL
by
Teppei Inaba
PDF
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
by
takanori suzuki
PPTX
タイマー
by
TENTO_slide
ODP
tcpdumpとtcpreplayとtcprewriteと他。
by
(^-^) togakushi
PDF
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
by
azumakuniyuki 🐈
PDF
#mailerstudy 01 LT POP/IMAP入門
by
Takashi Takizawa
PDF
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
by
Kenichiro MATOHARA
KEY
ひのきのぼうだけで全クリ目指す
by
AromaBlack
PDF
オセロの終盤ソルバーを100倍以上高速化した話
by
京大 マイコンクラブ
PPTX
これだけMakefile (Basics of makefile)
by
seichi23
PPT
処理概要図&構築手順書1124
by
Kazuki Miura
PPTX
Node.js - sleep sort algorithm
by
takesako
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PDF
マスタリングJUNOS DNS
by
ZenSekibe
PDF
pecoを使おう
by
Hideaki Miyake
PPT
Altanative macro
by
Motohiro KOSAKI
PPT
Javascriptで無限ループを実現する5つの方法
by
yhara
Python vs ruby
by
osamunmun
ちょっと古いマシンにLinuxを
by
Kenichiro MATOHARA
Raspberry Piにdiskless modeのalpine linuxを導入してみる
by
Kenichiro MATOHARA
ParliamentでGeoSPARQL
by
Teppei Inaba
Zabbix meeting 20101218_02-2 (Takanori Suzuki)
by
takanori suzuki
タイマー
by
TENTO_slide
tcpdumpとtcpreplayとtcprewriteと他。
by
(^-^) togakushi
JSONでメール送信 | HTTP API Server ``Haineko''/YAPC::Asia Tokyo 2013 LT Day2
by
azumakuniyuki 🐈
#mailerstudy 01 LT POP/IMAP入門
by
Takashi Takizawa
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
by
Kenichiro MATOHARA
ひのきのぼうだけで全クリ目指す
by
AromaBlack
オセロの終盤ソルバーを100倍以上高速化した話
by
京大 マイコンクラブ
これだけMakefile (Basics of makefile)
by
seichi23
処理概要図&構築手順書1124
by
Kazuki Miura
Node.js - sleep sort algorithm
by
takesako
Glibc malloc internal
by
Motohiro KOSAKI
マスタリングJUNOS DNS
by
ZenSekibe
pecoを使おう
by
Hideaki Miyake
Altanative macro
by
Motohiro KOSAKI
Javascriptで無限ループを実現する5つの方法
by
yhara
More from Masashi Umezawa
PDF
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
by
Masashi Umezawa
PDF
FileManで楽々ファイル操作
by
Masashi Umezawa
PDF
TruffleSqueakの紹介
by
Masashi Umezawa
PDF
SmalltalkBoltでUFFI入門
by
Masashi Umezawa
PDF
TaskItの紹介
by
Masashi Umezawa
PDF
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
by
Masashi Umezawa
PPTX
Revealing ALLSTOCKER
by
Masashi Umezawa
PDF
TarandocでJSONを永続化
by
Masashi Umezawa
PPTX
Dockerizing pharo
by
Masashi Umezawa
PDF
今からでも遅くないSmalltalk入門
by
Masashi Umezawa
PDF
VerStixの紹介
by
Masashi Umezawa
PDF
Oldtalk - あのころの処理系は今
by
Masashi Umezawa
PDF
Pyonkeeを鳴らす
by
Masashi Umezawa
PDF
Smalltalk勉強会 - 過去、現在、そして未来へ
by
Masashi Umezawa
PDF
Tarantalk
by
Masashi Umezawa
PDF
Smalltalkと型について
by
Masashi Umezawa
PDF
Introduction of Pharo 5.0
by
Masashi Umezawa
PDF
Why!? Smalltalk
by
Masashi Umezawa
PDF
Pillarの紹介
by
Masashi Umezawa
PPT
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
by
Masashi Umezawa
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
by
Masashi Umezawa
FileManで楽々ファイル操作
by
Masashi Umezawa
TruffleSqueakの紹介
by
Masashi Umezawa
SmalltalkBoltでUFFI入門
by
Masashi Umezawa
TaskItの紹介
by
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
by
Masashi Umezawa
Revealing ALLSTOCKER
by
Masashi Umezawa
TarandocでJSONを永続化
by
Masashi Umezawa
Dockerizing pharo
by
Masashi Umezawa
今からでも遅くないSmalltalk入門
by
Masashi Umezawa
VerStixの紹介
by
Masashi Umezawa
Oldtalk - あのころの処理系は今
by
Masashi Umezawa
Pyonkeeを鳴らす
by
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
by
Masashi Umezawa
Tarantalk
by
Masashi Umezawa
Smalltalkと型について
by
Masashi Umezawa
Introduction of Pharo 5.0
by
Masashi Umezawa
Why!? Smalltalk
by
Masashi Umezawa
Pillarの紹介
by
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
by
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
1.
Tarantube Smalltalk でメッセージキュー Smalltalk勉強会2017 合同会社ソフトウメヤ 梅澤真史
2.
Tarantubeとは ● 永続化機能付きメッセージキュー ○ http://smalltalkhub.com/#!/~MasashiUmezawa/Tarantube ●
Tarantoolのqueueモジュールのラッパー ○ わずか3クラスで作られている ■ TrTube ■ TrTubeTask ■ TrTubeOptionsBuilder
3.
Tarantubeの例 tarantalk := TrTarantalk
connect: 'taran:talk@localhost:3301'. "FIFOのtube作成" tube := tarantalk ensureTubeNamed: 'my_tube'. "tubeにtaskを追加" 1 to: 10 do: [:idx | tube putTaskWith: idx asString]. "定期的にタスクを取得して実行" tube repeatTakeTaskIfAvailable: [:task | Transcript cr; show: {task. task data}. task done].
4.
Tarantool ● No SQLの注目株 ○
ThoughtWorks Technology RadarのAssess段階 ○ ロシア製。Mail.ruで使われている ■ Heavy workloads: our use cases of Tarantool ● Tupleの永続化をサポート ○ KVSよりも構造化、RDBよりは軽量 ● Luaの実行エンジンであり、Luaで拡張できる ○ queue, RDBとの接続など ● 1.8系列からLuaに加えてSQLも使える
5.
Tarantoolのインストール ● Tarantoolの入手 ○ https://tarantool.org/en/download/download.html ■
様々なプラットフォームに対応 ○ Macなら brew install tarantool --HEAD
6.
Tarantoolの起動 ● 適当なディレクトリ(taranとか)を作成、移動し ● 3
+ 4 ● クライアントの接続受付 tarantool> 3 + 4 tarantool tarantool> box.cfg{listen = 3301}
7.
ユーザの権限設定 ● 接続用ユーザの登録 box.schema.user.grant('taran', 'read,write,execute',
'universe') box.schema.user.create('taran', {password = 'talk'}) ● アクセス権限の付与 参考: SmalltalkからLuaをevalする
8.
queueモジュールの導入 ● tarantoolctlで tarantoolctl rocks
install queue ● tarantoolのコンソールからrequireすると使える tarantool> queue = require('queue') tarantool> queue.stats()
9.
config.luaでの起動 ● お決まりの設定を書いておくと便利 box.cfg{listen =
3301, work_dir = 'queue_db'} box.schema.user.create('taran', {password = 'talk', if_not_exists=true}) box.schema.user.grant('taran', 'read,write,execute', 'universe', nil, {if_not_exists=true}) queue = require('queue') require('console').start() tarantool config.lua ● config.luaの例
10.
Tarantubeのインストール ● Catalog Browserから ○
'tarantube'で検索し、"install stable version" ● あるいはMetacelloでロード Metacello new smalltalkhubUser: 'Pharo' project: 'MetaRepoForPharo60'; configuration: 'Tarantube'; version: #stable; get; load.
11.
Tarantubeの構成 ● Tarantalk-Core ○ TrTube ■
いわゆるキュー ○ TrTubeTask ■ キューに積まれるタスク。 任意のデータを保持できる ○ TrTubeOptionsBuilder ■ 各種オプション指定のためのビルダー
12.
Tubeの生成 ● TrTarantalk>>connect:で接続 ○ URLでユーザ名、パスワードを指定 ●
ensureTubeNamed:type:setting:でTubeを生成 ○ ensureTybeNamed:type:で明示的に指定しない場合 シンプルなfifoキューとなる tarantalk := TrTarantalk connect: 'taran:talk@localhost:3301'. tube := tarantalk ensureTubeNamed: 'my_tube'.
13.
Tubeの種類 ● fifo ○ もっともシンプルなキュー ●
fifottl ○ TTL(time to live), TTR(time to run), Priority, Delay などが 指定できる高機能なキュー ● utube ○ グループ化できるキュー。グループごとにfifoで処理される ● utubettl ○ utubeの高機能版 (TTL, TTR, Priority, Delay…) ● https://github.com/tarantool/queue#queue-types
14.
Taskの投入(put) ● TrTube>>putTaskWith:setting:で投入 ○ 任意のデータ、及びdelayなどのオプションを指定できる tube
putTaskWith: 'hello'. tube putTaskWith: 'he--llo--' setting:[:opts| opts delay: 20].
15.
Tarantubeの例 (再び) tarantalk :=
TrTarantalk connect: 'taran:talk@localhost:3301'. "FIFOのtube作成" tube := tarantalk ensureTubeNamed: 'my_tube'. "tubeにtaskを追加" 1 to: 10 do: [:idx | tube putTaskWith: idx asString]. "定期的にタスクを取得して実行" tube repeatTakeTaskIfAvailable: [:task | Transcript cr; show: {task. task data}. task done].
16.
実行結果は... ● Transcript に以下のように表示
17.
consoleからの状態確認 ● config.lua でconsoleをstart
させておく require('console').start() ● queue.stats() ○ タスクの状態、呼び出しの状態が一覧表示される tarantool> queue.stats()
18.
delayを試してみる "fifottlのtube作成" ttlTube := tarantalk
ensureTubeNamed: 'ttl_tube' type: 'fifottl'. "tubeにtaskを追加" ttlTube putTaskWith: 'delayed' setting: [:opts | opts delay: 10]. 1 to: 10 do: [:idx | ttlTube putTaskWith: idx asString]. "定期的にタスクを取得して実行" ttlTube repeatTakeTaskIfAvailable: [:task | Transcript cr; show: {task. task data}. task done].
19.
実行結果は... ● 10秒後に'delayed'のタスクが実行される
20.
ttlを試してみる "タスク取得を止めておく" ttlTube stopTaking. "取得したタスクを実行する度に2秒ほど待つようにする" ttlTube repeatTakeTaskIfAvailable: [:task
| Transcript cr; show: {task. task data}. 2 seconds wait. task done ifFailed: [:ex | ex inspect]]. "tubeにTTLが5秒のtaskを追加" 1 to: 10 do: [:idx | ttlTube putTaskWith: idx asString setting: [:opts | opts ttl: 5]].
21.
実行結果は... ● 2つまで成功。3つ目はdoneに失敗
22.
utubeで詰まりにくく "utubeのtube作成" uTube := tarantalk
ensureTubeNamed: 'u_tube' type: 'utube'. "偶数、奇数のグループ指定でtaskを追加" 1 to: 10 do: [:idx | uTube putTaskWith: idx asString setting: [:opts | opts utube: (idx rem: 2) asString]]. uTube takeTask done. pending := uTube takeTask. "2番目をdoneにしない" uTube repeatTakeTaskIfAvailable: [:task | Transcript cr; show: {task. task data}. task done].
23.
実行結果は... ● 偶数グループは詰まる ● 奇数グループが実行を続ける
24.
buryとkick (1) "タスクを一時退避" pending bury. ●
偶数グループも実行される
25.
buryとkick (2) "一時退避していたタスクをキューに戻す" uTube kick:
1. ● 2番目のタスクも実行される
26.
luaでburyするには ● tarantoolctl connect
'user:pass@host:port' ○ あるいはconsoleでもよい queue.tube.u_tube:bury(box.space.u_tube.index.status:select('r')[1][1]) ● 管理用には覚えておくと便利 ○ https://github.com/tarantool/queue#fields-of-the-spac e-associated-with-each-queue
27.
接続の解放 ● TrTarantalk>>releaseで切断 ● TrTarantalk
class >> releaseAll ○ 全ての接続を一度に解放 tarantalk release. TrTarantalk releaseAll.
28.
事例は? ● ALLSTOCKER でメール送信のキューとして使用中 ○
アプリサーバのPharoからのリクエストで送信メールを永続 キューにためる ○ 別のPharoがキューから取り出し、SendGrid, TwilioのAPI経 由で送信
29.
まとめ ● Tarantubeでメッセージキューをわりと簡単に Pharoに導入できる ○ 永続化される安心感 ○
軽量だがそれなりに高機能 ● そろそろSmalltalkHubからGitHubに移動したい
Download