Używamy burzy z wylewką Kafki. Gdy zawiadamiamy o błędach, chcielibyśmy je odtworzyć, ale w niektórych przypadkach złe dane lub błędy w kodzie spowodują, że wiadomości będą zawsze zawierane przez Bolta, więc przejdziemy do nieskończonego cyklu powtórzeń. Oczywiście naprawiamy błędy, kiedy je znajdziemy, ale chcielibyśmy, aby nasza topologia była ogólnie odporna na błędy. Jak możemy ack() krotkę po tym, jak została powtórzona więcej niż N razy?Maksymalna liczba powtórzeń krotki na wylocie Storm Kafka
Przeglądając kod dla Kafki wylewem, widzę, że został on zaprojektowany, aby ponowić próbę z wykładniczym zegarem ograniczania mocy i stanu comments on the PR:
„Dziobek nie zakończyć cykl restartu (to jest moje przekonanie, że nie powinien tego robić, ponieważ nie może raportować kontekstu o awarii, która miała miejsce, aby anulować żądanie), obsługuje tylko opóźnianie ponownych prób, ale w topologii wciąż oczekuje się, że w końcu wywoła ack() zamiast fail(), aby zatrzymać cykl. "
Widziałem odpowiedzi StackOverflow, które zalecają pisanie niestandardowego dziobka, ale wolałbym nie utknąć z utrzymaniem niestandardowej poprawki wewnętrznych części wylewki Kafki, jeśli istnieje zalecany sposób wykonania tego w Bolt.
Jak to zrobić w Bolt? Nie widzę żadnego stanu w krotce, która eksponuje ile razy została powtórzona.
Jeśli masz jakieś sprawdzanie błędów w ryglu, gdzie możesz wywnioskować, że dana krotka jest "zła", jak na ciebie logiki biznesowej, możesz "ack" zamiast niepowodzenia .... więc nie będzie odtwarzany .. ... –