Suche…


Publish-Subscribe in Java

Der Publisher-Abonnent ist angesichts der Verbreitung von YouTube, Facebook und anderen Social Media-Diensten ein bekanntes Konzept. Das Grundkonzept besteht darin, dass ein Publisher Inhalte generiert und ein Subscriber Inhalte konsumiert. Wenn der Publisher Inhalt generiert, wird jeder Subscriber benachrichtigt. Subscribers können theoretisch bei mehreren Verlagen abonniert werden.

Normalerweise gibt es einen ContentServer , der sich zwischen Herausgeber und Abonnent befindet, um das Messaging zu vermitteln

public class Publisher {
    ...
    public Publisher(Topic t) {
        this.topic = t;
    }

    public void publish(Message m) {
        ContentServer.getInstance().sendMessage(this.topic, m);
    }
}

public class ContentServer {
    private Hashtable<Topic, List<Subscriber>> subscriberLists;

    private static ContentServer serverInstance;

    public static ContentServer getInstance() {
        if (serverInstance == null) {
            serverInstance = new ContentServer();
        }
        return serverInstance;
    }

    private ContentServer() {
        this.subscriberLists = new Hashtable<>();
    }
    
    public sendMessage(Topic t, Message m) {
        List<Subscriber> subs = subscriberLists.get(t);
        for (Subscriber s : subs) {
            s.receivedMessage(t, m);
        }
    }

    public void registerSubscriber(Subscriber s, Topic t) {
        subscriberLists.get(t).add(s);
    }

public class Subscriber {
    public Subscriber(Topic...topics) {
        for (Topic t : topics) {
            ContentServer.getInstance().registerSubscriber(this, t);
        }
    }
    
    public void receivedMessage(Topic t, Message m) {
        switch(t) {
            ...
        }
    }
}

Normalerweise wird das Pub-Sub-Entwurfsmuster unter Berücksichtigung einer Multithread-Ansicht implementiert. Eine der häufigsten Implementierungen sieht jeden Subscriber als separaten Thread, wobei der ContentServer einen Thread-Pool verwaltet

Ein einfaches Pub-Sub-Beispiel in JavaScript

Publisher und Abonnenten müssen sich nicht kennen. Sie kommunizieren einfach mit Hilfe von Message Queues.

(function () {
        var data;

        setTimeout(function () {
            data = 10;
            $(document).trigger("myCustomEvent");
        }, 2000);

        $(document).on("myCustomEvent", function () {
            console.log(data);
        });
})();

Hier haben wir ein benutzerdefiniertes Ereignis namens myCustomEvent veröffentlicht und dieses Ereignis abonniert. Sie müssen sich also nicht kennen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow