2014-06-24 27 views
9

Zastanawiam się, czy jest to możliwe. Chcę pobrać zadanie z kolejki i zlecić pracę, która może trwać od 3 sekund lub dłużej (być może) minut, zanim potwierdzenie zostanie wysłane do RabbitMQ, informując, że praca została zakończona. Praca jest wykonywana przez użytkownika, dlatego też czas potrzebny na przetworzenie zlecenia jest różny.Ustawienie długiego limitu czasu dla komunikatu potwierdzenia RabbitMQ

Nie chcę potwierdzać komunikatu natychmiast po tym, jak wyskakuję z kolejki, ponieważ chcę, aby wiadomość została zażądana, jeśli nie zostanie odebrany potwierdzenie. Czy ktoś może mi dać wgląd w to, jak rozwiązać mój problem?

Odpowiedz

7

uwzględniając długi czas oczekiwaniapowinno być dobrze, a na pewno, jak mówisz, że chcesz ponowne dostarczenie jeśli coś pójdzie nie tak, więc chcesz tylko ACKpo skończysz.

Najlepszym sposobem na osiągnięcie tego, IMO, będzie posiadanie wielu klientów w kolejce (tj. Wielu wątków/procesów zużywających się z tej samej kolejki). To powinno być w porządku, o ile nie ma konkretnego ograniczenia porządkowania zawartości twojej kolejki (tj. Sposobu, w jaki mogłaby istnieć kolejka zawierająca zawartość reprezentującą dane PostgreSy obejmujące ograniczenia FK).

Ten poradnik na stronie RabbitMQ dostarcza więcej informacji (Python powiązane, ale nie powinno być podobne tutoriale dla innych języków): https://www.rabbitmq.com/tutorials/tutorial-two-python.html

Edytowanie w odpowiedzi na komentarz z OP:

Jakie są twoje ustawienia? Jeśli twój pracownik nie potwierdzi bicie serca w ustalonym okresie czasu, serwer uzna połączenie za martwe.

Nie jesteś pewien, którego języka używasz, ale w przypadku Javy warto użyć metody setRequestedHeartbeat, aby określić puls.

Sposób, w jaki wdrażasz swoich pracowników, jest niezmiernie ważny, aby bicie serca mogło zostać wysłane z powrotem na serwer RabbitMQ. Jeśli coś blokuje klienta przed wysłaniem pulsu, serwer zabije połączenie po upływie czasu.

+1

Dzięki za cynk. Nie mogę znaleźć miejsca, w którym ustawię tę konfigurację limitu czasu dla wiadomości z RabbitMQ. Wygląda na to, że jeśli nie dostanę wiadomości po 10 sekundach, RabbitMQ umieszcza wiadomość z powrotem w kolejce, aby zostać pochłoniętą przez innego pracownika, co nie jest tym, czego chcę. Jakieś sugestie? – Wanged

+0

Dodano do odpowiedzi. – khampson