Python Language Comment consommer des messages de RabbitMQ


Exemple

Commencez par importer la bibliothèque.

from amqpstorm import Connection

Lors de la consommation de messages, nous devons d'abord définir une fonction pour gérer les messages entrants. Cela peut être n'importe quelle fonction appelable et doit prendre un objet de message ou un tuple de message (en fonction du paramètre to_tuple défini dans start_consuming ).

Outre le traitement des données du message entrant, nous devrons également accuser réception ou rejeter le message. Ceci est important, car nous devons informer RabbitMQ que nous avons correctement reçu et traité le message.

def on_message(message):
    """This function is called on message received.

    :param message: Delivered message.
    :return:
    """
    print("Message:", message.body)

    # Acknowledge that we handled the message without any issues.
    message.ack()

    # Reject the message.
    # message.reject()

    # Reject the message, and put it back in the queue.
    # message.reject(requeue=True)

Ensuite, nous devons configurer la connexion au serveur RabbitMQ.

connection = Connection('127.0.0.1', 'guest', 'guest')

Après cela, nous devons configurer un canal. Chaque connexion peut avoir plusieurs canaux et, en général, lors de l'exécution de tâches multithread, il est recommandé (mais pas obligatoire) d'en avoir une par thread.

channel = connection.channel()

Une fois notre chaîne configurée, nous devons informer RabbitMQ que nous souhaitons commencer à consommer des messages. Dans ce cas, nous utiliserons notre fonction on_message précédemment définie pour gérer tous nos messages consommés.

La file d'attente que nous allons écouter sur le serveur RabbitMQ va être simple_queue , et nous disons également à RabbitMQ que nous simple_queue réception de tous les messages entrants une fois que nous en aurons fini.

channel.basic.consume(callback=on_message, queue='simple_queue', no_ack=False)

Enfin, nous devons démarrer la boucle IO pour commencer le traitement des messages fournis par le serveur RabbitMQ.

channel.start_consuming(to_tuple=False)