GoとPythonをZeroMQで繋ぐ
April 26, 2013 - python, golang
最近Rubyでプロジェクトオイラーを解きながらRubyに慣れようとしてるのですが、ちょっと飽きてきたので息抜きにGoを書いたりしています。
ついでにZeroMQも試してみたかったので、GoとPythonをZeroMQで繋いでみました。
構成はこんな感じで、Python(かGo)clientを起動し、Goで動くmonitorq経由でGoのserverにつながります。PUB/SUBでmonitorからモニタリングできるのがミソです。
+----------------------------------------+
| |
+------+ |--------------------------+ +-----+ |
|client|--------|9001 monitorq 9002|-----|serv | |
|(REQ) | |(ROUTER) 9003 (DEALER)| |(REP)| |
+------+ |--------------------------+ +-----+ |
| |(PUB) |
| | |
| | |
| |(SUB) |
| +-------+ |
| |monitor| |
| +-------+ |
+----------------------------------------+
※client/server/monitorは複数たちあげるとよしなに振り分けてくれます。
- monitorqでfan-in/outする
$ go run queue.go monitorq
- clientから”PING”を投げる(と、”PONG#
“が帰る)
$ python run queue.py client
PONG#<28870>
PONG#<28870>
:
- serverから”PONG”を返す(clientからのPINGを表示)
$ go run queue.go serv
Recv: PING#<73835>
Recv: PING#<73835>
:
- monitorでリクエスト総数をモニタリング
$ go run queue.go monitor
MONITOR: IN: 2082, OUT 2082
MONITOR: IN: 2083, OUT 2083
:
コードはgistにあげてます。
ZeroMQなら他にもいろんな構成がとれるので、使いどころは結構あるのではないかと。
今回、不慣れなGoで書いてみましたが、これくらいであればもわりと素直にかけるなぁという印象です。
Goで書かれたZeroMQのサンプルは以下githubリポジトリにたくさんあるので、覗いてみると色々勉強になります。