51 votes

Comment puis-je récupérer les messages AMQP non reconnus à partir d'autres canaux que celui de ma connexion ?

Il semble que plus je fais fonctionner mon serveur rabbitmq longtemps, plus j'ai de problèmes avec les messages non reconnus. J'aimerais les remettre en file d'attente. En fait, il semble y avoir une commande amqp pour le faire, mais elle ne s'applique qu'au canal utilisé par votre connexion. J'ai construit un petit script pika pour au moins l'essayer, mais il me manque quelque chose ou cela ne peut pas être fait de cette façon (et avec rabbitmqctl ?)

 import pika

credentials = pika.PlainCredentials('***', '***')
parameters = pika.ConnectionParameters(host='localhost',port=5672,\
    credentials=credentials, virtual_host='***')

def handle_delivery(body):
    """Called when we receive a message from RabbitMQ"""
    print body

def on_connected(connection):
    """Called when we are fully connected to RabbitMQ"""
    connection.channel(on_channel_open)    

def on_channel_open(new_channel):
    """Called when our channel has opened"""
    global channel
    channel = new_channel
    channel.basic_recover(callback=handle_delivery,requeue=True)    

try:
    connection = pika.SelectConnection(parameters=parameters,\
        on_open_callback=on_connected)    

    # Loop so we can communicate with RabbitMQ
    connection.ioloop.start()
except KeyboardInterrupt:
    # Gracefully close the connection
    connection.close()
    # Loop until we're fully closed, will stop on its own
    connection.ioloop.start()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X