Site is under maintenance mode. Please wait few min!
Saltar al contenido

Cómo instalar y configurar el servidor de murmullo (Murmur) en Ubuntu 14.04

marzo 4, 2020

 Requisitos previos

RabbitMQ

Trabajo con RabbitMQ para enviar y recibir mensajes sólo es posible después de instalar y configurar el software en sí. Cómo instalar y administrar RabbitMQ explica con detalle cómo conseguir RabbitMQ de trabajo y es un buen punto de partida para el uso de este intermediario de mensajes. Biblioteca de Python

Puka

Todos los ejemplos en este artículo se presentan utilizando el lenguaje Python copia de seguridad con el manejo del protocolo de mensajería AMQP biblioteca puka. Python ha sido elegido como un limpio y fácil de entender el lenguaje por el bien de la presentación directa, pero desde AMQP es un protocolo ampliamente adoptado, cualquier otro lenguaje de programación puede ser utilizado libremente para alcanzar objetivos similares.

puka se puede instalar de forma rápida usando pip – un gestor de paquetes de Python.

pip install puka

PIP no siempre se incluye con las distribuciones de Linux. En las distribuciones basadas en Debian (incluyendo Ubuntu) que se puede instalar fácilmente usando:

apt-get install python-pip

en RHEL basa, como CentOS:

yum install python-setuptools
easy_install pip

Introducción a RabbitMQ y su terminología

de mensajería [ RabbitMQ en particular] introduce algunos términos que describen principios básicos del intermediario de mensajes y su mecánica.

  • Productor es un partido que envía mensajes, por lo tanto, la creación de un mensaje está produciendo.
  • Consumidor es una parte que recibe los mensajes, por lo tanto, recibir un mensaje está consumiendo.
  • Queue es un tampón en el que envían los mensajes se almacenan y listo para ser recibido. No hay limitación a la cantidad de mensajes puede contener una sola cola. Tampoco hay limitación en cuanto al número de productores pueden enviar un mensaje a una cola, ni cuántos consumidores pueden tratar de acceder a él. Cuando un mensaje golpea la cola existente, espera allí hasta que se consume por un consumidor para acceder a esa cola particular. Cuando un mensaje golpea una cola inexistente, que se desecha.
  • Exchange es una entidad que se encuentra entre los productores y las colas. El productor nunca envía un mensaje directamente a una cola. Envía mensajes a un intercambio, que – a su vez – coloca el mensaje a una o más colas, dependiendo del cambio utilizado. Para usar una metáfora de la vida real, el intercambio es como un cartero: Se ocupa de mensajes para que sean entregados a las colas adecuadas (buzones), de los cuales los consumidores pueden recoger ellos.
  • La unión es una conexión entre las colas y los intercambios. Colas unidas a un cierto cambio son servidos por el intercambio. ¿Cómo funciona exactamente depende de la propia bolsa.

Productor es un partido que envía mensajes , por lo tanto, la creación de un mensaje está produciendo.

del consumidor es un partido que recibe mensajes, por lo tanto, recibir un mensaje está consumiendo.

Queue es un tampón en el que envían los mensajes se almacenan y listo para ser recibido. No hay limitación a la cantidad de mensajes puede contener una sola cola. Tampoco hay limitación en cuanto al número de productores pueden enviar un mensaje a una cola, ni cuántos consumidores pueden tratar de acceder a él. Cuando un mensaje golpea la cola existente, espera allí hasta que se consume por un consumidor para acceder a esa cola particular. Cuando un mensaje golpea una cola inexistente, que se desecha.

Cambio es una entidad que reside entre los productores y las colas. El productor nunca envía un mensaje directamente a una cola. Envía mensajes a un intercambio, que – a su vez – coloca el mensaje a una o más colas, dependiendo del cambio utilizado. Para usar una metáfora de la vida real, el intercambio es como un cartero: Se ocupa de mensajes para que sean entregados a las colas adecuadas (buzones), de los cuales los consumidores pueden recoger ellos.

Encuadernación una conexión entre las colas y los intercambios. Colas unidas a un cierto cambio son servidos por el intercambio. ¿Cómo funciona exactamente depende de la propia bolsa.

los cinco términos se utilizan en todo el texto. Hay uno más, estrictamente relacionados con puka biblioteca de Python, que fue elegido como la biblioteca de elección por su claridad. Es una promesa , que puede ser entendido como una petición síncrona con el servidor AMQP que la ejecución garantías (con éxito o no) de la solicitud y en el que el cliente espera hasta que se complete.

Mientras puka puede funcionar de forma asíncrona, en nuestros ejemplos puka se utilizarán como una biblioteca síncrona. Eso significa que después de cada solicitud puka (promesa) esperarán hasta que el fichero es ejecutado antes de ir al siguiente paso.

Prueba RabbitMQ y Puka con una prueba Ejemplo

A simple si el intermediario de mensajes y puka funciona perfectamente, y para obtener un control sobre cómo los mensajes que envían y reciben funcionan en la práctica, crear un script de ejemplo pitón llamado rabbit_test.py

vim rabbit_test.py

y pegar el contenido del script:

import puka

# declare send and receive clients, both connecting to the same server on local machine
producer = puka.Client("amqp://localhost/")
consumer = puka.Client("amqp://localhost/")

# connect sending party
send_promise = producer.connect()
producer.wait(send_promise)

# connect receiving party
receive_promise = consumer.connect()
consumer.wait(receive_promise)

# declare queue (queue must exist before it is being used - otherwise messages sent to that queue will be discarded)
send_promise = producer.queue_declare(queue='rabbit')
producer.wait(send_promise)

# send message to the queue named rabbit
send_promise = producer.basic_publish(exchange='', routing_key='rabbit', body='Droplet test!')
producer.wait(send_promise)

print "Message sent!"

# start waiting for messages, also those sent before (!), on the queue named rabbit
receive_promise = consumer.basic_consume(queue='rabbit', no_ack=True)

print "Starting receiving!"

while True:
received_message = consumer.wait(receive_promise)
print "GOT: %r" % (received_message['body'],)
break

Prensa : WQ para guardar el archivo y salga.

Al ejecutar el script debe imprimir el mensaje que fue enviado por el guión a la cola RabbitMQ , ya que el programa de prueba recibe el mensaje inmediatamente después. La salida debe ser similar:

root@rabbitmq:~# python rabbit_test.py
Message sent!
Starting receiving!
GOT: 'Droplet test!'
root@rabbitmq:~#

Para explicar lo que sucede en este código, vamos a ir paso a paso:

consumidores y productores se crean y se conectan al mismo servidor RabbitMQ, que reside en el servidor local Productor

declara una cola, a Asegúrese de que existe cuando se produce el mensaje. Si no fuera por este paso, una cola podría ser inexistente, y por lo tanto los mensajes podría quedar descartado de inmediato.

Productor envía el mensaje a un nameless_ intercambiar (más en los intercambios viene más adelante) con una clave de enrutamiento que especifica la cola creada de antemano. Después de que el mensaje golpea el cambio, lo que a su vez se coloca en la cola de “conejo”. El mensaje entonces se sienta allí hasta que alguien va a consumir.

del consumidor accede a la cola “conejo” y empieza a recibir mensajes almacenados allí. Debido a que hay un mensaje en espera, que serán atendidos de inmediato. Se consume, lo que significa que ya no se quedará en la cola.

El mensaje consumida se imprime en la pantalla.

Fanout Cambio

En el ejemplo anterior, un intercambio sin nombre se ha utilizado para entregar el mensaje a una cola especial llamado “conejo”. El intercambio sin nombre, necesita un nombre de cola de trabajo, lo que significa que puede entregar el mensaje sólo a una sola cola.

También hay otros tipos de intercambios en RabbitMQ , uno de los cuales es despliegue en abanico , nuestra principal preocupación en este texto. intercambio de despliegue en abanico es una herramienta sencilla y ciega que entrega los mensajes a las colas TODO que es consciente. Con el intercambio despliegue en abanico no hay necesidad (de hecho – es imposible) para proporcionar un nombre de cola en particular. Los mensajes que golpean ese tipo de intercambio se entregan a todas las colas que están vinculados al intercambio antes de que el mensaje se ha producido. No hay límite para el número de colas se pueden conectar a la central.

de publicación / suscripción Patrón

Con el intercambio de despliegue en abanico, podemos crear fácilmente un publicación / suscripción patrón , trabajando como un proceso abierto a todos boletín. Productor, un boletín informativo de la emisora, envía mensajes periódicos para el público al que ni siquiera puede saber (produce el mensaje y lo envía al intercambio de despliegue en abanico boletín). Los nuevos suscriptores se aplican para el boletín (se une propia cola para el mismo boletín despliegue en abanico). A partir de ese momento el intercambio despliegue en abanico boletín entregará el mensaje a todos los abonados registrados (colas).

Mientras que uno-a-uno mensajería es bastante sencillo y los desarrolladores suelen utilizar otros medios de comunicación, uno-a-muchos (donde “muchos” no está especificada y puede ser cualquier cosa entre pocos y mucha ) es un muy popular escenario en el que un intermediario de mensajes puede ser de gran ayuda.

escritura Productor Aplicación

La única función de la aplicación productor es crear una bolsa de despliegue en abanico con nombre y producir mensajes periódicos (cada pocos segundos) para que el intercambio. En un escenario de la vida real, se producirían mensajes por una razón. Para simplificar el ejemplo, los mensajes serán generados automáticamente. Esta aplicación va a actuar como editor de noticias.

Crear un script en Python llamado newsletter_produce.py

vim newsletter_produce.py

y pegar el contenido del script: ir paso de

import puka
import datetime
import time

# declare and connect a producer
producer = puka.Client("amqp://localhost/")
connect_promise = producer.connect()
producer.wait(connect_promise)

# create a fanout exchange
exchange_promise = producer.exchange_declare(exchange='newsletter', type='fanout')
producer.wait(exchange_promise)

# send current time in a loop
while True:
message = "%s" % datetime.datetime.now()

message_promise = producer.basic_publish(exchange='newsletter', routing_key='', body=message)
producer.wait(message_promise)

print "SENT: %s" % message

time.sleep(1)

producer.close()

Vamos a paso con el ejemplo para explicar lo que sucede en el código.

cliente Productor se crea y se conecta a la instancia RabbitMQ local. A partir de ahora se puede comunicar con RabbitMQ libremente. Se crea

Un cambio de nombre boletín despliegue en abanico. Después de este paso, existe el intercambio del servidor RabbitMQ y se puede utilizar para colas unirá a él y mensajes enviar a través de ella.

En un bucle sin fin, los mensajes con la hora actual se producen para el intercambio de noticias. Tenga en cuenta que routing_key está vacía, lo que significa que no hay cola en particular especificado. Es el cambio que va a entregar el mensaje a las colas apropiadas más adelante.

La aplicación, cuando se ejecuta, notifica a la hora actual a todos los suscriptores del boletín. aplicación

escritura Aplicación para el consumidor

Consumidor creará una cola temporal y enlazarlo a un intercambio de despliegue en abanico llamado. Después de eso, se iniciará la espera de mensajes. Después de unirse a la cola para el intercambio, cada mensaje enviado por el productor creada antes de recibirse dentro de este consumidor. Esta aplicación va a actuar como un boletín para suscriptores será posible ejecutar la aplicación en múltiples ocasiones a la vez y aún así todos los casos recibirán mensajes de difusión.

Crear un script en Python llamado newsletter_consume.py

vim newsletter_consume.py

y pegar el contenido del script:

import puka

# declare and connect a consumer
consumer = puka.Client("amqp://localhost/")
connect_promise = consumer.connect()
consumer.wait(connect_promise)

# create temporary queue
queue_promise = consumer.queue_declare(exclusive=True)
queue = consumer.wait(queue_promise)['queue']

# bind the queue to newsletter exchange
bind_promise = consumer.queue_bind(exchange='newsletter', queue=queue)
consumer.wait(bind_promise)

# start waiting for messages on the queue created beforehand and print them out
message_promise = consumer.basic_consume(queue=queue, no_ack=True)

while True:
message = consumer.wait(message_promise)
print "GOT: %r" % message['body']

consumer.close()

El código del consumidor es un poco más complicado que el productor. Echemos un vistazo a paso a paso: cliente

Consumidor se crea y se conecta a la instancia RabbitMQ local. Se crea

Una cola temporal. medios temporales que ningún nombre se suministra – nombre de la cola será generada automáticamente por RabbitMQ. Además, tales cola será destruida después el cliente se desconecta. Es una forma común de crear colas que existir sólo a ser atado a una de las bolsas y no tienen otros fines especiales. Puesto que es necesario para crear una cola para recibir algo, es un método conveniente de evitar pensar en el nombre de la cola. El

creado cola está destinada al intercambio de noticias. A partir de ese momento, el intercambio despliegue en abanico entregará cada mensaje a esa cola.

En un bucle sin fin que espera el consumidor en la cola, recibiendo cada mensaje que llega a la cola de impresión y en la pantalla.

La aplicación, cuando se ejecuta, recibe las notificaciones de hora desde el editor de boletines. Se puede ejecutar varias veces a la vez, y cada instancia de esta aplicación obtendrá la hora actual.

Prueba Ambas aplicaciones

Para probar el editor de noticias y sus consumidores, abrir varias sesiones SSH al servidor virtual (o abrir varias ventanas de terminal, si se trabaja en el equipo local). En una de las ventanas de ejecutar la aplicación productor.

root@rabbitmq:~# python newsletter_produce.py

Se empezará a mostrar cada segundo la hora actual:

SENT: 2014-02-11 17:24:47.309000
SENT: 2014-02-11 17:24:48.310000
SENT: 2014-02-11 17:24:49.312000
SENT: 2014-02-11 17:24:50.316000
...

En todos los demás ventana de ejecutar la aplicación de los consumidores:

root@rabbitmq:~# python newsletter_consume.py

Cada instancia de esta aplicación recibirá las notificaciones de tiempo emitidas por el productor:

GOT: 2014-02-11 17:24:47.309000
GOT: 2014-02-11 17:24:48.310000
GOT: 2014-02-11 17:24:49.312000
GOT: 2014-02-11 17:24:50.316000
...

Significa que RabbitMQ adecuadamente registrada el intercambio despliegue en abanico, con destino las colas de abonados a este intercambio, y entregado los mensajes enviados a las colas adecuadas. En otras palabras, RabbitMQ funcionó como se esperaba.

Lectura adicional

publicación / suscripción es un simple (tanto en concepto como de implementar) patrón que a menudo puede ser útil mensajería; que está muy lejos de los límites RabbitMQ sin embargo. Hay innumerables maneras de utilizar RabbitMQ para resolver los problemas de mensajería, incluyendo enrutamiento avanzado de mensajes, acuses de recibo de mensajes, la seguridad o la persistencia.

El objetivo principal de este texto era introducir los conceptos básicos de mensajería utilizando ejemplos simples. Muchos otros usos están cubiertos en detalle en la documentación oficial RabbitMQ que es un gran recurso para los usuarios y los administradores RabbitMQ.