Go言語によるWebアプリケーション開発という書籍(O’REILLY)を購入して勉強中の初心者Gopherです。
この5章にある「分散システムと柔軟なデータの処理」をやってみたのですが、
この出版社の日本語訳がわかりずらい。さらに文書中にコードが散在していて拾うの結構大変(main.goに書くのをtwitter.goに書いたり)。
さらに、著者のサイトにサンプルコードもあるのですが、実際に書籍に書いてある内容とソースが違っている(たぶん改訂したのか?)
と様々問題はあるのですが、自分なりに整理をして、もし、同じようなところで「勉強しずらいなー」と感じている人向けに共有します。
こういうのってQiitaでやったほうがいいのか判断がつかないので自ブログで。
まずこの章を乗り越える前提に必要なNSQから。
NSQとは
メッセージキューの一種(あるプログラムから別のプログラムへメッセージとイベントを送信できる。)
送信先のプログラムは複数あっても、別のマシン上のものでも構わない。
■当方の実行環境
Mac OS X High Sierra
nspd v1.2.0
nslookupd v.1.2.0
go version go1.11.1 darwin/amd64
Homebrewをインストール済
■インストール
Macは下記でOK
$ brew install nsq
その他OSは
https://nsq.io/deployment/installing.htmlを参照
GOPATHの直下に移動して
Goで利用するには別途ドライバーをインスールする。
$ go get github.com/bitly/go-nsq
参考URL https://postd.cc/dissecting-message-queues/
NSQはBitlyが構築したメッセージングプラットフォーム。
プラットフォームと言ったのは、リアルタイムの分散型メッセージングに、
より役立つよう構築されたツールがNSQ周辺にはたくさんある。
◾️デーモンの起動
起動はそれぞれにターミナルを開いて実行する。
終了はCtrl+Cで。
$ nsqd
メッセージを受信し、格納し、クライアントに送り届けるデーモン。
デーモンはスタンドアロンでも動作する。
NSQは分散型トポロジとして動作するようデザインされている。
$ nsqlookupd
nsqlookupdはnsqdインスタンスのためのサービスを検出する仕組み。
ディフォルトでバインドするアドレス、ポート
TCPは 0.0.0.0:4160
HTTPは 0.0.0.0:4161
管理コマンド
$ nsqadmin --lookupd-http-address=127.0.0.1:4161
リアルタイムのクラスタ統計を表示し、
キューの削除やトピックの処理など様々な管理業務を実行する役割を果たすWeb UIを提供。
■動作確認
メッセージを発行する。
$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'
別のターミナルで, nsq_to_file コマンドを実行
$ nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161
test.*.logファイルが /tmp 以下に書き込まれ、「hello world 1」という文字列があればOK。
とりあえず、ここまで!