Używam Spring-Kafka w wersji 1.2.1, a gdy serwer Kafka jest wyłączony/nieosiągalny, asynchroniczne wysyłanie blokuje przez pewien czas. Wydaje się, że jest to limit czasu TCP. Kod jest coś takiego:Spring Kafka asynchroniczne wysyłanie bloków blokowych
ListenableFuture<SendResult<K, V>> future = kafkaTemplate.send(topic, key, message);
future.addCallback(new ListenableFutureCallback<SendResult<K, V>>() {
@Override
public void onSuccess(SendResult<K, V> result) {
...
}
@Override
public void onFailure(Throwable ex) {
...
}
});
Zrobiłem naprawdę szybki rzut oka na kod Wiosna-Kafka i wydaje się po prostu przekazać zadanie wraz z biblioteką klienta Kafka, tłumaczenia interakcji oddzwonienia do przyszłości interakcja z obiektem. Patrząc na bibliotekę klienta kafki, kod staje się bardziej złożony i nie potrzebowałem czasu, aby to wszystko zrozumieć, ale przypuszczam, że może on wykonywać wywołania zdalne (przynajmniej metadane?) W tym samym wątku.
Jako użytkownik oczekiwałem metod Spring-Kafka, które zwracają przyszłość, aby natychmiast powrócić, nawet jeśli zdalny serwer kafka jest nieosiągalny.
Każde potwierdzenie, jeśli moje zrozumienie jest błędne lub jeśli jest to błąd, byłoby mile widziane. W końcu skończyłem na asynchronicznym zakończeniu.
Innym problemem jest fakt, że dokumentacja Springa-Kafki mówi na początku, że zapewnia synchroniczne i asynchroniczne metody wysyłania. Nie mogłem znaleźć żadnych metod, które nie zwracają przyszłości, może dokumentacja wymaga aktualizacji.
W razie potrzeby chętnie udzielę dalszych informacji. Dzięki.
Dziękuję za odpowiedź. Nie Nie używam tej adnotacji, nie było w niej nic w dokumentacji. Spróbuję i dam ci znać, jeśli to rozwiąże problem. –
Korzystanie z @EnableAsync niestety niczego nie zmieniło =/ –