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

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 60: Строка 60:
 
====Отправка сообщения====
 
====Отправка сообщения====
 
<PRE>
 
<PRE>
  +
#!/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()
  +
 
</PRE>
 
</PRE>
   

Версия 15:13, 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()

Ссылки