RabbitMQ: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 95: Строка 95:
 
Т.е. похоже, работает =)
 
Т.е. похоже, работает =)
   
  +
==Кластеризация==
  +
Действую согласно документации (ноды rabbit1 и rabbit2 прописаны в /etc/hosts)
  +
<PRE>
  +
rabbitmqctl stop_app
  +
rabbitmqctl join_cluster --ram rabbit@rabbit1
  +
rabbitmqctl start_app
  +
</PRE>
  +
Если что-то не так - есть такие методы диагностики
  +
  +
<PRE>
  +
rabbitmqctl eval 'net_adm:ping(rabbit@rabbit1).'
  +
</PRE>
  +
  +
<PRE>
  +
rabbitmqctl -n rabbit@rabbit1 status
  +
</PRE>
 
==Ссылки==
 
==Ссылки==
 
* http://habrahabr.ru/post/150134/
 
* http://habrahabr.ru/post/150134/

Версия 16:49, 6 декабря 2012

RabbitMQ

Это такой брокер очередей.
Тут будет компиляция из статей на русском и английском в переводе.

Постановка Задачи

Настроить кластер RabbitMQ


Установка RabbitMQ (отдельно стоящий)

Под CentOs 6.3 - ставлю из epel:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ivh /epel-release-6-7.noarch.rpm
yum install rabbitmq-server.noarch librabbitmq.x86_64  librabbitmq-devel.x86_64

Стартую с конфигом по-умолчанию:

ps -auxfw
....
rabbitmq 26833  0.0  0.0  10820   464 ?        S    11:05   0:00 /usr/lib64/erlang/erts-5.8.5/bin/epmd -daemon
root     26836  0.0  0.0 106052  1276 ?        Ss   11:05   0:00 sh -c RABBITMQ_PID_FILE=/var/run/rabbitmq/pid /usr/sbin/rabbitmq-server >             /var/log/rabbitmq/startup_log 2> /var/log/rabbitmq/startup_err
root     26839  0.0  0.0 106052  1356 ?        S    11:05   0:00  \_ /bin/sh /usr/sbin/rabbitmq-server
root     26846  0.0  0.0 145340  1544 ?        S    11:05   0:00      \_ su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server 
rabbitmq 26849  8.4  1.4 579972 27304 ?        Ssl  11:05   0:00          \_ /usr/lib64/erlang/erts-5.8.5/bin/beam -W w -K true -A30 -P 1048576 -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -noshell -noinput -sname
rabbitmq 26918  0.0  0.0   4048   420 ?        Ss   11:05   0:00              \_ /usr/lib64/erlang/lib/os_mon-2.2.7/priv/bin/cpu_sup
rabbitmq 26923  0.0  0.0  10784   520 ?        Ss   11:05   0:00              \_ inet_gethost 4
rabbitmq 26924  0.0  0.0  12888   636 ?        S    11:05   0:00                  \_ inet_gethost 4

Проверка работы

Получение сообщения

Скрипт получения сообщений (с хабра) который обрабатывает "таск" столько секунд сколько точек в сообщении

#!/usr/bin/env python

import pika
import time

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print ' [*] Waiting for messages. To exit press CTRL+C'

def callback(ch, method, properties, body):
    print " [x] Received %r" % (body,)
    time.sleep( body.count('.') )
    print " [x] Done"
    ch.basic_ack(delivery_tag = method.delivery_tag)

channel.basic_qos(prefetch_count=1)
channel.basic_consume(callback,
                      queue='task_queue')

channel.start_consuming()

Отправка сообщения

#!/usr/bin/env python

import pika
import sys

connection = pika.BlockingConnection(pika.ConnectionParameters(
        host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)

message = ' '.join(sys.argv[1:]) or "Hello World!"
channel.basic_publish(exchange='',
                      routing_key='task_queue',
                      body=message,
                      properties=pika.BasicProperties(
                         delivery_mode = 2, # make message persistent
                      ))
print " [x] Sent %r" % (message,)
connection.close()

Тестирую отдельно-стоящего кроля

[root@localhost ~]# ./new_task.py 23421412......
 [x] Sent '23421412......'
[root@localhost ~]# ./worket.py
 [*] Waiting for messages. To exit press CTRL+C
 [x] Received '23421412......'
 [x] Done

Т.е. похоже, работает =)

Кластеризация

Действую согласно документации (ноды rabbit1 и rabbit2 прописаны в /etc/hosts)

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app

Если что-то не так - есть такие методы диагностики

rabbitmqctl eval 'net_adm:ping(rabbit@rabbit1).' 
rabbitmqctl -n rabbit@rabbit1 status

Ссылки