Message Queue


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ここを編集
※ メモ状態

概略

Message Queueとは?

通信にキューを使う。非同期かつ疎なシステムを構築するのに便利。基本的にはソケットのようなストリーミング(バイト単位)通信ではなく、メッセージング(メッセージの固まり)通信なのでプログラムしやすい。中核はPush/Pull通信だが、ライブラリ全体ではしばしばPub/SubやReq/Rep通信もサポートされる。

ライブラリ/サーバ

WebsphereMQ(IBM)

 IBMのWebsphereシリーズの一角。一度位使ってみたいなぁ。

ActiveMQ(Aphache)

 JMS。処理速度は遅め?

RabbitMQ(rabbitmq)

 AMQP。Erlang言語で記述されている。

MSMQ(Microsoft)

 Windowsに標準でついている。性能はわからないが使った感じ、まぁまぁ。.NETからの使いやすさが抜群。

ØMQ(zeromq)

 ZeroMQ, zmq, 0mqなどとも。プロトコルは独自?だと思う。TCP,IPCなどが使える。上記とは毛色の異なるメッセージキューライブラリ(拡張ソケットライブラリ)。オンメモリなので消える。おそらく速い。

Let's Start ØMQ !!

インストール

 MacならMacPortでzmqを検索してインストールすればOK。Linuxもおそらく。

メモ

基本的には抽象レベルの高いソケットライブラリと思えばよい。通信モデル(Push/Pullなど)を指定したソケットを作り、通信プロトコルを含む接続情報を指定してバインドすれば送受信できる。通信処理自体は裏でライブラリ側が非同期に実行する。context_t型がその実体(スレッド)に対応している。ライブラリは基本的にC言語のライブラリをもとに他の言語への移植がなされている。オプションでブロックノンブロックを制御できる。試していないが、winodwsでこれを一発でかえられるとすると、それだけで面倒な初期化がなくてよいかも。

サンプル(C++)

メッセージの送信側(PUSH)

zmq::context_t ctx(1);
zmq::socket_t sock(ctx, ZMQ_PUSH);
sock.bind("tcp://127.0.0.1:10000");
zmq::message_t msg(size);
strncopy(msg.data(), dat, size);
sock.send(msg);

メッセージの受信側(POP)

zmq::context_t ctx(1);
zmq::socket_t sock(ctx, ZMQ_PULL);
sock.bind("tcp://127.0.0.1:10000");
zmq::message_t msg();
sock.recv(&msg);
|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|


統計・機械学習


計算機


プログラミング



Raspberry Pi


その他



工事中


関係ない話題


管理者用



プロフィール

但馬慶行
(TAJIMA Yoshiyuki)

機械学習とロボットを趣味で勉強中。
連絡先はトップページ