RabbitMQ

0

Cześć wam,
Trochę się dzisiaj zirytowałem, bo czuję niemoc w zrozumieniu tej technologii.
**Zatem:
Endpointy w moim API zaczęły dość wolno chodzić po tym jak je rozbudowałem. Na odpowiedź na localhoscie trzeba czekać 3 sekundy, a ze zdalnego serwera się ten czas zwiększa. Domyślam się że tak nie może być.

Myślałem, że asynchroniczna wymiana danych mi w tym pomoże. No i znalazłem AMQP i jego imlementację RabbitMQ.
Myślałem także, że będzie się to odbywało na takiej zasadzie:

  1. Endpoint odpowie błyskawicznie
  2. Inne zadania z tego endpointu jak: wyrenderowanie JSowych wykresów i maili oraz wysłanie je do klienta. W między czasie taki raport ma być zapisany jako PDF i schowany na lokalnym dysku.

I nie wiem czy dobrze myślę, czy pokręciłem wszystko? Chciałbym, żeby endpoint najpierw odpowiedział z szybkimi danymi na już, a później w tle aplikacja by sobie generowała raporty i je rozsyłała. Najpierw chciałem to zrobić za pomocą aspektów, po wykonaniu endpointu, ale podejrzewam, że apka zwolni, albo padnie kompletnie jak przyjdzie sporo takich samych requestów.

Ktoś mi rozjaśni ?
Dzięki!

0

RabbitMQ to narzędzie służące do kolejkowania zadań, to, że jest asynchronicze wynika wprost z jej definicji. W twoim wypadku to nie wiem do czego ci się przyda, ono się przydaje gdy np. masz kilka maszyn które obsługują żądania.

W zależności od tego w jakim Springu piszesz - albo męczysz się z @Async (ja próbowałem i sobie odpuściłem), albo w piątce odpalasz Webfluxa, uczysz się nowoczesnych nieblokujących technologii i piszesz asynchroniczne. Ewentualnie może starczy odpalić jakiś wątek by ci zrobił co tam chcesz, ale boję się dotykać współbieżności w Springu więc się nie wypowiem.

0

Można tak zrobić, jak będziesz miał dużo requestów: przychodzi request -> wrzucasz do kolejki informacje(samo wrzucenie szybkie jest) -> dajesz responsa. W oddzielnej puli wątków robisz jakiś subscriber któy bedzie zbierał i przetwarzał dane z kolejki lub jak chcesz w springu masz moduły do rabbita spring-rabbit i do kolejek amqp spring-amqp i tylko robisz implementacje MessageListener któr odwala długa robotę
Albo tak jaki pisał @CountZero można użyć springowego Async, żeby zrobic asynchronicznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1