Sto utilizzando un produttore RabbitMQ per inviare attività a esecuzione prolungata (30 minuti +) a un utente. Il problema è che il consumatore sta ancora lavorando su un'attività quando la connessione al server è chiusa e l'attività non riconosciuta viene riaccesa.RabbitMQ chiude la connessione durante l'elaborazione di attività in esecuzione prolungata e le impostazioni di timeout producono errori
Dalla ricerca capisco che sia possibile utilizzare uno heartbeat o uno increased connection timeout per risolvere questo problema. Entrambe queste soluzioni sollevano errori durante il tentativo. Leggendo le risposte a post simili, ho anche appreso che molte modifiche sono state implementate in RabbitMQ da quando sono state pubblicate le risposte (ad esempio, il timeout predefinito di heartbeat è passato da 60 a 580 prima di RabbitMQ 3.5.5).
Quando si specifica un battito cardiaco e bloccato timeout di connessione: viene visualizzata
credentials = pika.PlainCredentials('user', 'password')
parameters = pika.ConnectionParameters('XXX.XXX.XXX.XXX', port, '/', credentials, blocked_connection_timeout=2000)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()
il seguente errore:
TypeError: __init__() got an unexpected keyword argument 'blocked_connection_timeout'
Quando si specifica heartbeat_interval=1000
nel collegamento parametri viene visualizzato un errore simile: TypeError: __init__() got an unexpected keyword argument 'heartbeat_interval'
Analogamente per socket_timeout = 1000
viene visualizzato il seguente errore: TypeError: __init__() got an unexpected keyword argument 'socket_timeout'
Sto eseguendo RabbitMQ 3.6.1, pika 0.10.0 e python 2.7 su Ubuntu 14.04.
- Perché gli approcci di cui sopra producono errori?
- È possibile utilizzare un approccio heartbeat in presenza di un'attività continua a esecuzione prolungata? Ad esempio, è possibile utilizzare heartbeat durante l'esecuzione di join di database di grandi dimensioni che richiedono più di 30 minuti? Sono favorevole all'approccio heartbeat poiché molte volte è difficile valutare la durata di un'attività come l'aggiunta al database.
ho letto attraverso le risposte alle domande simili
Aggiornamento: esecuzione code from the pika documentation produce lo stesso errore.
C'è qualche tipo di bilanciamento del carico seduto davanti al server di coniglio mq? L'aspetto del tuo ambiente potrebbe essere rilevante per rispondere a questa domanda. – mschuett
Le macchine di produzione e di consumo si trovano tutte sulla stessa rete privata. – Greg
Il problema è che è necessario elaborare i dati durante l'attesa, anche se non si stanno consumando messaggi; connection.process_data_events(). Altrimenti il pika non risponderà ai battiti del cuore. – eandersson