2012-01-26 28 views
5

Co stanie się z wiadomościami przesyłanymi do wirtualnego tematu, gdy nie będzie żadnych użytkowników? Czy pośrednik utrzyma je przez pewien czas, dopóki abonent nie będzie dostępny?Wirtualne tematy/kolejki i trwałość

Dokładniej: W komunikatach T0 i T1 M0 i M1 są wysyłane. W T2, konsument C1 łączy się, czy otrzyma M0 i M1? Oczywiście wiadomości M2 i M3 wysłane na T3 i T4 będą odbierane przez C1, ale co będzie nowego Konsumenta, C2, który łączy się przy T5? Wszystkie wiadomości, M2 i M3, lub żadne?

+0

Będę musiał zapytać, co próbowałeś do tej pory? – Eugene

+0

nie zdążyłem jeszcze spróbować, zrobię to. Na razie tylko teoretyczne, ale będę musiał to wiedzieć –

Odpowiedz

4

To zależy od natury tematu: , jeśli temat jest trwały (ma trwałych konsumentów subskrybujących go), broker będzie przechowywać wiadomości w temacie, aż wszyscy konsumenci trwałych zużywają wiadomości. , jeśli temat jest nietrwały (brak trwałych użytkowników), wiadomość nie zostanie nawet wysłana do tematu, ponieważ nie będzie trwałej subskrypcji.

Na swoim przykładzie, to uważam, że używasz trwałe subskrypcjami/konsumentów: Przypadek 1:

  • T-2 C1 i C2 zrobić trwałą subskrypcję do tematu
  • T-1 C1 i C2 odłączyć
  • T0: M0 jest zamieszczona
  • T1: M1 jest zamieszczona
  • T2: C1 łączy. C1 otrzymuje M0 i M1
  • T3: Wysłano M3. C1 otrzymuje M3
  • T4: Wysłano M4. C1 odbiera M4
  • T5: C2 łączy, C2 otrzymuje M0, M1, M2, M3, M4

to dlatego, że oni trzymają durable subscriptions Trzeba być bardzo ostrożnym przy stosowaniu trwałych tematów/kolejki: jeśli konsument nie anuluje subskrypcji, broker będzie przechowywać wiadomości do momentu wyburzenia magazynu wiadomości. Musisz się upewnić, że tak się nie stanie (ustawiając eviction policies i/lub umieszczając komunikat Czas na żywo). Oczywiście poprzedni przykład będzie różnił się w zależności od tego, kiedy konsument wykona trwałą subskrypcję.

Jeśli używasz nietrwałych tematy:

  • T-2 C1 i C2 zrobić normalny abonament do tematu
  • T-1 C1 i połączenia C2
  • T0: M0 jest zamieszczona
  • T1: M1 jest opublikowane
  • T2: C1 łączy. C1 nic nie otrzymuje
  • T3: Wysłano M3. C1 otrzymuje M3
  • T4: Wysłano M4.C1 odbiera M4
  • T5: C2 łączy, C2 nie otrzyma nic
0

Dlaczego nie może istnieć obserwator/obserwowalne wzór - na przykładzie powyżej:

Kiedy M0 jest wysłane, C1 i C2 (konsumenci subskrybowani) są obudzeni i mogą spożywać to wydarzenie? Widzę ten wzór lepiej niż trwałe i nietrwałe - podejście hybrydowe.

1

Istnieją dwa sposoby, aby umożliwić opublikowanie komunikatów opublikowanych w wirtualnym temacie. Pierwszy to trwały subskrybent, a drugi to wydawanie przez wydawcę wiadomości z trybem dostarczania "PERSISTENT". Gdy wiadomości są publikowane z trybem dostarczania "PERSISTENT", wiadomość zostanie zapisana na dysku, w przeciwnym razie zostanie zapisana w pamięci.