2017-02-13 64 views
5

Mam następujących konfiguracji:Czy zatwierdzane są zadania wstępne w selera naciowego?

  • RabbitMQ maklera + Django
  • Seler z CELERYD_PREFETCH_MULTIPLIER = 32 (mam dużo małych zadania zatem preselekcji im sprawia, że ​​wiele sensu z realizacji punktu widzenia)
  • CELERY_ACKS_LATE = Fałsz (zadania nie są idempotentne)

Prowadzę seler w pojemniku dokera, więc po przebudowie dokerów pracownicy sektora selerów nie są z wdziękiem zamykani. To jest w porządku, jeśli zadania nie zostaną potwierdzone, ponieważ broker odeśle je, gdy robotnicy powrócą do nowego kontenera dokowanego, ale w innym przypadku - zostaną utracone.

W panelu administracyjnym, zadania z panelu administracyjnego mają status odebrany.

Przeczytałem uważnie oficjalną dokumentację i related question i intuicyjnie uważam, że wstępnie zadeklarowane zadania w mojej konfiguracji są uznawane. Czy to prawda?

Odpowiedz

2

Z CELERY_ACKS_LATE=False zadanie zostanie potwierdzone natychmiast po uruchomieniu przez pracownika: just before execution.

Więc jeśli pracownik rozpocznie wykonywanie zadania, a ty go zabijesz, zadanie zostanie utracone. Inne zadania z wyprzedzeniem nie zostaną utracone, ponieważ są nadal niepotwierdzone.

+0

To brzmi rozsądnie, ale zadania z wyprzedzeniem w kwiatku są oznaczone jako "ODBIERANE" - czy to oznacza, że ​​nie zaczęto ich wykonywać? –

+0

Domyślam się, że "ODBIERZ" oznacza "Unacked" pod względem Rabbitmq. Inni pracownicy nie mogą ich wstępnie pobrać, ponieważ nie są "gotowi". Ale jeśli pracownik utraci połączenie bez potwierdzenia, stanie się "Gotowy". – Raz

+0

Ale jeśli zrestartuję serwer selera (twardy restart), w jaki sposób rabbitmq będzie wiedział, że te zadania można przypisać do innych węzłów? –