2016-04-29 4 views
1

abrufen Ich habe ein paar Probleme mit PHP + RabbitMQ + MySQL.Wie die gleiche Nachricht zweimal oder mehr in RabbitMQ mit PHP

Ich habe Arbeiter auf PHP, die einen Datensatz in DB aktualisieren. Jetzt versuche ich, die richtige Arbeit zu machen, wenn Server MySQL weggegangen ist.

Was ich tue: Ich versuche wieder 10-mal DB, wenn ich kann nicht - müssen diese Massage, um wieder zurück auf die RabbitMQ.

Für Nachricht akzeptieren ich basic_ack, für die Ablehnung ich basic_nack.


Beispiel:

if ($can_accept_message) { 
     $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']); 

    } else { 
     $message->delivery_info['channel']->basic_nack($message->delivery_info['delivery_tag']); 
    } 

Aber basic_nack löschen diese Meldung aus der Warteschlange, und ich kann es nicht noch einmal wiederholen, (

wie dieser Versuch:https://github.com/php-amqplib/php-amqplib/blob/d2b8a292f709b79b1615bef87b1b89bde4c7c347/demo/basic_nack.php

Dies lesen:https://github.com/php-amqplib/php-amqplib/issues/221

Aber es funktioniert immer noch nicht.

Was ist los? Vielleicht hast du noch andere Ideen?

+0

können Sie uns zeigen die Konfig deiner Warteschlange bitte? Und andere Dummy-Frage, bist du sicher, dass du in das "else" eingibst? – olibiaz

+0

** >> können Sie mit uns die Config Ihrer Warteschlange zeigen, bitte ** wie dieser Versuch: https://github.com/php-amqplib/php-amqplib/blob/d2b8a292f709b79b1615bef87b1b89bde4c7c347/demo/basic_nack.php ** >> Und andere Dummy Frage, Sie sicher, dass Sie in die sonst? ** Ja –

Antwort

1

Es scheint, die Funktion basic_nack wie folgt definiert ist:

/** 
* Rejects one or several received messages 
* 
* @param string $delivery_tag 
* @param bool $multiple 
* @param bool $requeue 
*/ 
public function basic_nack($delivery_tag, $multiple = false, $requeue = false) 

Wie Sie sehen können, der dritte Parameter $requeue = false

Sie sollten versuchen,

else { 
    $message->delivery_info['channel']->basic_nack($message->delivery_info['delivery_tag'], false, true); 
} 
+0

Ich tryind schreibe wie du sagst, aber es hilft nicht = ( Vielleicht muss ich etwas anderes hinzufügen? –

+0

Bearbeite Nachricht durch Wenn Sie nach Stapelverarbeitung arbeiten, sollte das zweite Argument auch "true" sein. Also, um Ihre Nachricht aus der Warteschlange nach 'basic_nack (...)' zu löschen, richtig? – olibiaz

+0

Ich begreife dies Ja, ich bin sicher –