Wpis z mikrobloga

#java #spring #springboot #jms #programowanie #notification

Cześć Mirki,

tworzę sobie aplikację z użytkownikami i projektami i chciałbym stworzyć funkcjonalność powiadomień w rzeczywistym czasie pomiędzy użytkownikami. Czyli dany użytkownik A przypisał projekt użytkownikowi B to użytkownik B na przeglądarce powinien dostać w jakimś dymku lub ukryte pod jakimś przyciskiem powiadomienie że ma nowy projekt. Aplikację robię w oparciu o JAVA Spring Boot. Jeśli chodzi o powiadomienie to znalazłem kilka rozwiązań:
- JMS: ale z tego co wyczytałem to jest potrzebny osobny serwer ApacheMQ który będzie trzymać dane w kolejkach
- Spring Reactor: tutaj nie bardzo potrafię zrozumieć strategii wysyłania powiadomień pomiędzy użytkownikami
- WebSocket
- Zapytania SQL do bazy czy jest coś nowego

Które rozwiązanie z tych lub jakiś waszych własnych jest najlepsze i najskuteczniejsze do tworzenia powiadomień między użytkownikami tak żeby to było wydajne? Z góry dziękuję za pomoc :)
  • 9
  • Odpowiedz
@dzimen: wydajność już zależy od tego jak to zaimplementujesz. Ale najprostsze i chyba najbardziej oczywiste jest:
klasa która śle komunikaty po websockecie obserwuje klasę w której przypisujesz projekty[wzorzec obserwator]. Wtedy żadnych dodatkowych zapytań do bazy nie potrzebujesz, a powiadomienia masz od razu po zapisaniu zmiany w bazie.
  • Odpowiedz
@dzimen: reactor w ogóle nie rozwiązuje Ci twojego problemu, a JMS tylko połowicznie, bo i tak klient musi jakoś "pobrać" te notyfikacje.

Połączenie Websocketem pozwala na to, żeby klient dostał powiadomienie i na nie zareagował.
  • Odpowiedz
@tempname0626: czy dobrze myślę, że trzeba by zrobić w JAVA lub DB tabelę z powiadomieniami, odróżniając je po użytkowniku i typie? Bo jak nigdzie się one nie zapiszą to po odświeżeniu przeglądarki powiadomienie zniknie mimo to że jest nie przeczytane.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@dzimen: poczytaj więcej, bo z tego co kojarzę do ActiveMQ nie potrzeba osobnego Sewera, w projekcie mieliśmy przesiadkę z RabbitMQ,(który musiał być postawiony osobno) na ActiveMQ. W Springu wlasnie. Plus info o zadaniach wysyłanych na kolejkę zapisane w tabeli w bazie. Pozdr
  • Odpowiedz