MemcacheQ это система очередей сообщений, основанная на коде базы данных MemcacheDB, которая в свою очередь основана на коде memcached. Соответственно MemcacheQ использует тот же протокол что и Memcached (точнее только две команды из него - get и set), а значит для работы с ним не требуется дополнительных модулей. Это позволяет при работе с ним пользоваться теми же преимуществами что и при использовании Memcached.
Например в PHP можно использовать модули pecl-memcache и pecl-memcached, и если PHP работает как FastCGI-процесс или как модуль веб-сервера (mod_php) можно использовать устойчивые соединения. Далее будет показано как можно установить MemcacheQ на сервер под управлением FreeBSD 8.2.
Инструкция по установке на официальной странице проекта полностью игнорирует какую либо систему управления пакетами и предлагает в ручную компилировать Berkley DB и MemcacheQ. Мы же попробуем написать свой порт, хотя исходные тексты MemcacheQ оформлены так чтобы максимально усложнить такую сборку.
Создадим на сервере директорию порта и перейдём в неё:
set D=/usr/ports/databases/memcacheq && mkdir -p $D{,/files} && cd $D && unset D
Затем создаёт Makefile, следующего содержания:
PORTNAME= memcacheq PORTVERSION= 0.2.0 CATEGORIES= databases MASTER_SITES= ${MASTER_SITE_GOOGLE_CODE} \ ${MASTER_SITE_GENTOO} MASTER_SITE_SUBDIR= distfiles MAINTAINER= michael@fun-box.ru COMMENT= Simple queue service over Memcache LIB_DEPENDS= event-1.4:${PORTSDIR}/devel/libevent CFLAGS= -I"${BDB_INCLUDE_DIR}" LDFLAGS= -l"${BDB_LIB_NAME}" -L"${LOCALBASE}/lib" CONFIGURE_ENV= CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" USE_RC_SUBR= memcacheq USE_BDB= 47+ GNU_CONFIGURE= YES CONFIGURE_ARGS= --with-libevent=${LOCALBASE} --with-bdb=${LOCALBASE} --enable-threads PLIST_FILES= bin/memcacheq MCQDIR?= /var/db/memcacheq .include <bsd.port.pre.mk> post-install: ${MKDIR} ${MCQDIR} || ${TRUE} ${CHOWN} nobody:nobody ${MCQDIR} .include <bsd.port.post.mk>
Так же нужен файл контрольных сумм - distinfo:
SHA256 (memcacheq-0.2.0.tar.gz) = b314c46e1fb80d33d185742afe3b9a4fadee5575155cb1a63292ac2f28393046 SIZE (memcacheq-0.2.0.tar.gz) = 131519
Файл с описанием порта pkg-descr:
MemcacheQ is a Simple Queue Service over Memcache. Features: * damn simple * very fast * multiple queue * concurrent well * memcache protocol compatible WWW: http://memcachedb.org/memcacheq/
И наконец файл-init-скрипта, который нужно разместить в директории порта как files/memcacheq.in:
#!/bin/sh # # PROVIDE: memcacheq # REQUIRE: DAEMON # # Add the following lines to /etc/rc.conf to run memcacheq: # # memcacheq_enable (bool): Set it to "YES" to enable memcacheq. # Default is "NO". # memcacheq_flags (flags): Set extra flags here. # Default is empty "". # memcacheq_user (user): Set user to run memcacheq. # Default is "nobody". # . /etc/rc.subr name="memcacheq" rcvar=${name}_enable load_rc_config ${name} : ${memcacheq_enable="NO"} : ${memcacheq_user="nobody"} : ${memcacheq_pidfile="/var/db/memcacheq/memcacheq.pid"} pidfile=${memcacheq_pidfile} command=%%PREFIX%%/bin/memcacheq command_args="-d -N -H /var/db/memcacheq -R -L 1024 -B 1024 -u ${memcacheq_user} -P ${pidfile}" unset memcacheq_user run_rc_command "$1"
Желающие могут скачать весь порт одним архивом, который достаточно закачать на сервер и распаковать командой:
tar jxfv memcacheq-0.2.0-freebsd-port.tab.bz2 -C /
Закончив с файлами порта установим сервис:
cd /usr/ports/databases/memcacheq && make install clean
Для запуска сервиса при старте системы добавим в файл /etc/rc.conf строку:
memcacheq_enable="YES"
И наконец запустим сервис:
/usr/local/etc/rc.d/memcacheq start
Теперь memcacheq запущен и слушает на портах 22201/tcp и 22201/udp и обращаться можно как к обычному memcached-серверу. Поддерживаются только команду get и set. Команда get вычитывает следующее значение из именованной очереди, а set - добавляет значение в именованную очередь. Параметр ttl у команды set игнонируется.
Пример практического применения memcacheq мы приведём в одной из следующих статей, а пока всё. Приятной работы!
Anonymous 2011-03-28 06:13:33 (#)
>Пример практического применения memcacheq мы приведём в одной из следующих статей
Жду с нетерпением.