---
# System prepended metadata

title: T.1.3.4 Protocolo AMQP - Fanout Exchange

---

# T.1.3.4 Protocolo AMQP - Fanout Exchange

![](https://i.imgur.com/dszF8Ih.png)

En este taller se describe un ejemplo simple del uso del intercambiador "fanout". Adicionalmente, se realiza unas pruebas validando la conexión a un servidor en la nube.

## Configuración del consumidor

Copie el siguiente código en un nuevo archivo denominado `amqp-fanout-consumer.py` y guarde en la carpeta AMQP . 

```Python=
import pika, os, time

mExchange='logs'
mQueue='' 


# Access the CLODUAMQP_URL environment variable 
url = os.environ.get('CLOUDAMQP_URL', 'amqp://guest:guest@localhost:5672/%2f')
#url = os.environ.get('CLOUDAMQP_URL', 'amqps://kdcybhqi:JrAPsxQXOBg_qT-yJHqYSA4ZxrJbb4KC@shrimp.rmq.cloudamqp.com/kdcybhqi')


params = pika.URLParameters(url)
connection = pika.BlockingConnection(params)
channel = connection.channel() # start a channel
channel.exchange_declare(exchange=mExchange, exchange_type='fanout') #willian Zamora
result = channel.queue_declare(queue=mQueue, exclusive=True)
queue_name= result.method.queue
channel.queue_bind(exchange=mExchange, queue=queue_name)

# create a function which is called on incoming messages
def callback(ch, method, properties, body):
    print("logs Received:", str(body))
    time.sleep(1) # delays for 1 seconds

channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)
print(' [*] Waiting messages. To exit press CTRL+C')


try:
    # start consuming (blocks)
    channel.start_consuming()
except KeyboardInterrupt:
    print('Interrupted')
    connection.close()

print("Fin de ejecución")
```
En general, el código anterior varía en el macanismo de conexión hacia el broker. En particular, la conexión se lo realiza mediante una variable de ambiente donde obtiene los parámetros como usuario y contraseña requeridos para autentificar al broker. La línea número 15 describe el método del intercambiador.

## Configuración del publicador

Copie el siguiente código en un nuevo archivo denominado `amqp-fanout-publisher.py` y guarde en la carpeta AMQP . 

```Python=
import pika, os, sys

mExchange='logs'
mQueue='' 

url = os.environ.get('CLOUDAMQP_URL', 'amqp://guest:guest@localhost/%2f')
#url = os.environ.get('CLOUDAMQP_URL', 'amqps://kdcybhqi:JrAPsxQXOBg_qT-yJHqYSA4ZxrJbb4KC@shrimp.rmq.cloudamqp.com/kdcybhqi')

params = pika.URLParameters(url)
params.socket_timeout = 2

connection = pika.BlockingConnection(params) # Connect to CloudAMQP
channel = connection.channel() # start a channel
channel.exchange_declare(exchange=mExchange, exchange_type='fanout')
channel.queue_declare(queue='cola') # Declare a queue

# send a message
message = ' '.join(sys.argv[1:]) or 'Hello World!'
channel.basic_publish(exchange=mExchange, routing_key='', body=message)

print ("[x] Message sent to consumer:", message)
connection.close()

print("Fin de ejecución")
```
El código define el intercambiador "logs" y un mensaje simple que puede ser digitado por consola.

## Ejecución del programa

Para validar la ejecución del intercambiador fanout se sigue el mismo procedimiento que los talleres anteriores.  Ejecute el consumidor y luego ejecute el publicador.  Verifique los resultados. Recuerde que debe usar dos consolas para validar lo anterior.

:::info
:bulb: **Tarea**: Se le solicita que realice lo siguiente:
1. Cree una cuenta en [CloudAMQP](https://customer.cloudamqp.com/signup).
2. Una vez adentro cree una instancia de un broker RabbitMQ
3. Tome el url 
4. Haga las validación ejecución del consumidor y publicador.
:::

![](https://hackmd.io/_uploads/S1NbcGEKY.png)
