TINF15ITNS / MB

A message broker implemented in Java according to our courses project guidelines
0 stars 0 forks source link

Anzahl der Multicast-Gruppen? #4

Closed NikolaiGit closed 8 years ago

NikolaiGit commented 8 years ago

Der Server erhält über ne TCP-Verbindung eine Nachricht von einem producer, die er weiterverbreiten soll. Dies soll er mit einer Multicast-Gruppe tun. Die verschiedenen Consumer haben sich ja nun auf den verschiedenen Produzenten eingeschrieben. Um dann nur die eingeschriebenen Konsumenten zu informieren bräuchte man ja eine Unzahl an Multicast-Gruppen - für jede Variation eine.

Soll jetzt für jede Nachricht eine Multicastgruppe erstellt werden auf der gleichen Adresse, die dem Konsument von Anfang an mitgegeben wurde? Bzw das klappt doch gar nicht! Der Konsument muss ja der Gruppe beitreten und das geht doch erst, nachdem die Gruppe erstellt wurde.

Lösungsvorschlag: Die Konsumenten schreiben sich gar nicht beim Server auf die Produzente ein, sondern es werden die IDs, für welche Produzenten man sich einschreiben will, lokal gespeichert. Dann horscht man immer auf Multicast-Nachrichten und arbeitet mit der erhaltenen Nachricht aber nur weiter, wenn die ProduzentenID mit einer übereinstimmt, die gespeichert wurde.

naibaf0 commented 8 years ago

Okay, scheint als ob Multicast nicht so funktioniert wie ich mir das vorgestellt hatte.

Deine Lösung würde eventuell funktionieren, allerdings ist ja dann der gesamte ubscribe/unsubscribe Zirkus der uns vorgeschrieben ist ohne irgendeinen relevanten Zweck...

Unsere Aufgabe ist übrigens wie ich jetzt gesehen habe de fakto eine Implementierung des Publish/Subscribe Patterns.

Das könnt ihr euch auch mal durchlesen. Ich mach mir da auch mal ein paar Gedanken.

NikolaiGit commented 8 years ago

Ja das wäre doof, wenn die ganze subscribe/unsubscribe-Geschichte nur "lokal" abläuft ...

Variante 2: Für jeden Producer gibt's ne Multicast-Gruppe! Das Einschreiben läuft dann folgendermaßen: Nach getSubscriptions() gibt der User ein, auf welche er sich einschreiben möchte. Dann wird, wie bisher, die Message losgeschickt, in deren Payload die Producer sind, auf die der User sich einschreiben möchte. Als Antwort kommen dann die ganzen Multicast-Adressen, auf welche er sich dann im folgenden einschreibt. Das Unschöne an der Sache: Der Consumer hat so viele weitere Threads am laufen, wie er sich auf Producer eingeschrieben hat. Denn wir brauche ja nen MulticastSocket pro Multicast-Gruppe, die auf Nachrichten horscht

naibaf0 commented 8 years ago

Seite 2 der Aufgabenstellung:

Der Server verwaltet die Produzenten und Konsumenten und deren Beziehung und leistet die Nachrichtenvermittlung. Er hält die aktuellen Zustände der Produzenten (keine komplette Historie).

Er verwaltet die Beziehung de Konsumenten und Produzenten. Ich weiß nicht ob unsere Variante da geht @NikolaiGit

naibaf0 commented 8 years ago

Nöchmal überlegt. Man kann es schon so oder so auslegen...