12 May 2010

AMQP-REST

Website development
про AMQP говорили много. Очередная разработка, ориентированная на AJAX.
Возможности:
  • читать из очереди одно сообщение
  • читать из очереди все сообщения
  • узнать длинну очереди
  • публиковать сообщение в обмен

Данные возвращаются в JSON.


Сборка


logfile /usr/local/var/amqp.log; # logfile

pidfile /tmp/amqp.pid; # pidfile

log_level notice; # the level of logging : error, notice, warning, debug

daemon on; # daemon mode

port 80; # http port, default 80
http 10.0.0.1; # bind IP

amqp :5672; # amqp connection string psw:login@host:port/vhost


Запуск

./amqp-rest [полное имя конфиг-файла]
./amqp-rest stop // останавливает сервис
kill -s HUP `ps | grep amqp-rest | awk '{print $1}'` // перезапуск с новой конфигурацией


Использование

чтение одного элемента из очереди
именем очереди выступает правая часть url до последнего слеша. Для урла /sss/q2 именем очереди будет «q2». Это сделано намеренно, так как все урлы вешаются на определенный локейшен и проксируется через 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 }


публикация
Именем обмена так же является часть урла между последним слешем и '?', а ключом обмена является часть урла, после знака вопроса. Например для урла 10.0.0.1:8080/sss/ex1?news
именем обмена является «ex1», а ключом обмена (routing key) является «news»
curl -d 'some post data' 10.0.0.1:8080/sss/ex1?news
{"result": "Ok"}


Конечно, все расчитано на AJAX. nginx стоит фронт сервером и проксирует запросы на amqp-rest. Можно обойтись и без nginx, если их повесить на разные IP. В моем случае я использую ngx_accesskey_module для защиты от спама. Возможно этот функционал в будущем перенесется в amqp-rest.

заключение

что каается производительности: 1300rps
место в памяти 601к
Tags:amqprestrabbitmq
Hubs: Website development
+4
4.9k 23
Comments 26