機能:
- キューから1つのメッセージを読み取ります
- キューからすべてのメッセージを読み取る
- キューの長さを調べる
- 交換でメッセージを投稿する
データはJSONで返されます。
組立
- libeventのインストール(ポートで利用可能、ほとんどのサーバーに既にインストール済み) monkey.org/~provos/libevent
- rabbitmq-cをインストールしますhg.rabbitmq.com/rabbitmq-c
- プロトコルコード生成hg.rabbitmq.com/rabbitmq-codegenのインストール
- amqpcpp code.google.com/p/rabbitcppをインストールします
- メイクファイルを実行します。
- amqp-restを/ usr / local / binにコピーします
- n.confを編集して/usr/local/etc/amqp-rest.confにコピーします
ログファイル/usr/local/var/amqp.log ; #ログファイル
pidfile / tmp / amqp。 pid ; #pidfile
log_level notice ; #ロギングのレベル:エラー、通知、警告、デバッグ
デーモンオン; #デーモンモード
ポート80 #httpポート、デフォルト80
http 10.0.0.1 ; #バインドIP
amqp: 5672 ; #amqp接続文字列psw:login @ host:port / vhost
打ち上げ
./amqp-rest [ -]
./amqp-rest stop //
kill -s HUP `ps | grep amqp-rest | awk '{print $1}'` //
使用する
キューから1つのアイテムを読み取ります
キュー名は、最後のスラッシュまでURLの正しい部分です。 url / sss / q2の場合、キュー名は「q2」です。 これは、すべてのURLが特定の場所でハングし、nginxを介してプロキシされるため、意図的に行われます。
curl 10.0.0.1:8080/sss/q2
{"result": "OK", "message":"message 2", size : 2}
// size - , .
キューからすべてのアイテムを読み取ります
curl 10.0.0.1:8080/sss/q2?all
{"result": "OK", "count" : 2, messages ["message 3","the text\"xxxx\" tttt"]}
// count - .
キューサイズ
curl 10.0.0.1:8080/sss/q2?count
{"result": "Ok", "count": 3 }
出版
交換名は、最後のスラッシュと「?」の間のURLの一部でもあります。また、交換キーは、疑問符の後のURLの一部です。 たとえば、URL 10.0.0.1の場合 :8080 / sss / ex1?
交換名はex1、ルーティングキーはニュースです
curl -d 'some post data' 10.0.0.1:8080/sss/ex1?news
{"result": "Ok"}
もちろん、すべてがAJAX用に設計されています。 nginxはサーバーの前に立ち、amqp-restのリクエストをプロキシします。 異なるIPにぶら下げれば、nginxなしで実行できます。 私の場合、ngx_accesskey_moduleを使用してスパムから保護しています。 おそらく、この機能は将来amqp-restに移行されるでしょう。
結論
パフォーマンスの悔い改め:1300rps
メモリ空間601k