Einstellung einer langen timeout für RabbitMQ ack-Nachricht
Ich Frage mich, ob dies möglich ist. Ich möchten, ziehen Sie eine Aufgabe aus einer Warteschlange und haben einige arbeiten, die potenziell überall von 3 Sekunden oder länger (möglicherweise) Minuten, bevor ein ack gesendet wird, zurück zum RabbitMQ-Benachrichtigung, dass die Arbeit abgeschlossen ist. Die Arbeit ist getan, die von einem Benutzer, ist also, warum die Zeit, die es braucht um den job variiert.
Will ich nicht auf der ack-Nachricht sofort, nachdem ich pop-off der Reihe, weil ich die Nachricht requeued, wenn kein ack empfangen wird. Kann mir jemand irgendwelche Erkenntnisse, wie mein problem zu lösen?
InformationsquelleAutor Wanged | 2014-06-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lange timeout sollte in Ordnung sein, und sicherlich, wie Sie sagen, Sie wollen Rücklieferung, wenn etwas schief geht, so möchten Sie nur ack nach Sie fertig stellen.
Der beste Weg, um zu erreichen, dass, IMO, wäre mehrere Verbraucher auf die Warteschlange (d.h. mehrere threads/Prozesse, die konsumieren, die aus der gleichen Warteschlange). Das sollte in Ordnung sein, solange es keine Besondere Bestellung Einschränkung auf Ihrer queue-Inhalte (also wie es sein könnte, wenn die Warteschlange enthält Inhalte darstellen Postgres-Daten beinhaltet, dass die FK-constraints).
Diesem tutorial auf die RabbitMQ website bietet weitere Informationen (Python verbunden, aber es sollte so ähnlich wie in tutorials für andere Sprachen): https://www.rabbitmq.com/tutorials/tutorial-two-python.html
Bearbeiten in der Antwort auf Kommentar von OP:
Was ist dein Herzschlag eingestellt? Wenn Ihre Arbeitnehmer nicht anerkennen, der Herzschlag innerhalb der gesetzten Frist, kann der server über die Verbindung tot zu sein.
Nicht sicher sind, welche Sprache Sie verwenden, aber für Java verwenden Sie die
setRequestedHeartbeat
Methode zum angeben der Herzschlag.Den Weg Sie bei der Umsetzung Ihrer Arbeitnehmer, ist es wichtig, dass der Herzschlag kann noch gesendet werden, zurück zu den RabbitMQ server. Wenn etwas blockiert den client sendet der Herzschlag, der server bringt die Verbindung, nachdem das Zeitintervall abgelaufen ist.