# T.1.3.4 Protocolo AMQP - Fanout Exchange

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.
:::
