Wpis z mikrobloga

Cześć. Tworzę aplikację serwerową (Java, Spring Boot) razem z klientem webowym (ReactJS). Będzie tam odczytywana między innymi temperatura z urządzeń dla konkretnego użytkownika. Aktualnie jeden z serwisów zbiera wszystkie pomiary i przy uzyciu kafka-stream patrzy czy został przekroczony próg i jeśli tak to zapisuje alarm do osobnego topicu (w tym topicu jest zawarty id usera). Chciałbym teraz zrobić jakąś komunikację z klientem, aby na bieżąco informować usera o alercie (wolałbym uniknąć okresowego odpytywania). Jak to najlepiej ugryźć? Stawiam na SSE aniżeli na WebSocket bo komuniacja tylko w jedną stronę. Ale mam problem z ideą łączenia eventu/alarmu z klientem webowym. Klient webowy łączy się do SSE, na podstawie tokena biorę id użytkownika i podpinam się pod te eventy i filtruje z nich tylko te, które zawierają id tego użytkownika?

#programowanie #java #spring #springboot #kafka
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Ale nadal moje pytanie bardziej odnosi się do tej kafki i eventów, które przychodzą dla każdego użytkownika. Rozumiem, że klient webowy ma się "podpiąć" pod ten strumień i wziąć sobie tylko te eventy dla konkretnego użytkownika?
  • Odpowiedz
@cycun: musisz filtrować ale na poziomie BE, wyciągając id użytkownika z sesji na podstawie requestu. nie możesz ot tak wrzucić wszystkich eventów i filtrować po stronie FE, bo co to za problem spoofnąć id jakiegoś innego usera i podpiąć się pod jego eventy?
  • Odpowiedz
@kernelpan1c: założenie jest takie, że użytkownik łącząc się do socketu/sse daje mi token i stamtąd dostaję id użytkownika i filtruje na serwerze. Nie chciałem tego robić po stronie fronta.
  • Odpowiedz
@kernelpan1c: Szedłbym w stronę Webfluxa. Jakiś processor do którego będę wysyłał eventy/alarmy i w controllerze zrobię subscribe pod to będzie ok? Tylko teraz tak czytam, że klient może mieć problem z wysłaniem headera z tokenem w EventSource ale jakiś hak na to jest.
  • Odpowiedz
@cycun: imo najłatwiej byłoby to zrobić na websocketach, autentykujesz się na początku z jwt i śmiga. kafka może roibć jako broker dla stompa? jeśli tak to nawet nie musisz niczego infrastrukturalnie dodawać
  • Odpowiedz