# 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)