Da das Projekt einige Daten benötigt, die gepusht und empfangen werden, und die Datenmenge relativ groß ist, etwa 3 Millionen Daten pro Tag
Anfangs habe ich HTTP Post verwendet, um Daten einzureichen, aber festgestellt, dass es zu langsam war und die Sendegeschwindigkeit viel geringer war als die Empfangsgeschwindigkeit.
Wenn du also eine lange Socket-Verbindung nutzen möchtest, um Daten zu pushen und zu empfangen, schreibe den Socket-Server und Client selbst – eine davon ist Zeitverschwendung, aber es kann nicht gut funktionieren
Schließlich wird activemq verwendet, um Daten zu übertragen und zu empfangen
Erstens ist der Produzentencode wie folgt:
Verbraucher gibt es zwei Modelle:
1: Gewöhnliches Abonnement, kein dauerhaftes "Abonnement" erforderlich, das heißt, beim Verbinden können Sie Nachrichten empfangen und vor der Verbindung keine Nachrichten erhalten, indem Sie "CreateConsumer" verwenden 2: Persistent Subscription, nach der Verbindung können Sie Daten erhalten, die zuvor nicht gepusht wurden, über "CreateDurableConsumer".
Links zur Einführung von CreateDurableConsumer:Der Hyperlink-Login ist sichtbar.
Erstelle ein nicht geteiltes persistentes Abonnement zum angegebenen Thema, falls es noch nicht existiert, und erstelle einen Konsumenten für dieses persistente Abonnement. Diese Methode erstellt ein persistentes Abonnement, ohne einen Nachrichtenselektor zu verwenden, und der noLocal-Wert ist falsch. Die Anwendung verwendet ein persistentes Abonnement, und die Anwendung muss alle zum Thema veröffentlichten Nachrichten empfangen, einschließlich Nachrichten, die veröffentlicht werden, wenn keine aktiven Konsumenten damit verbunden sind. Der JMS-Anbieter führt ein Protokoll über dieses persistierende Abonnement und stellt sicher, dass alle Nachrichten des betreffenden Publishers aufbewahrt werden, bis sie an den Verbraucher zugestellt und von diesem persistenten Abonnement bestätigt werden, bis sie abgelaufen sind.
Persistente Abonnements sammeln weiterhin Nachrichten an, bis sie mit der Abmeldemethode gelöscht werden.
Diese Methode kann nur mit nicht geteilten persistenten Abonnements verwendet werden. Alle persistenten Abonnements, die mit dieser Methode erstellt werden, werden nicht mehr geteilt. Das bedeutet, dass jeweils nur ein aktiver (d. h. nicht geschlossener) Nutzer im Abonnement existieren kann. Der Begriff "Consumer" bezeichnet hier das TopicSubscriber-, MessageConsumer- oder JMSConsumer-Objekt in jedem Client.
Ein nicht geteiltes persistentes Abonnement wird durch einen vom Client angegebenen Namen und eine Client-Identifikation identifiziert, die gesetzt werden muss. Anwendungen, die dann Konsumenten auf einem nicht geteilten persistenten Abonnement erstellen wollen, müssen dieselbe Client-Kennung verwenden.
Wenn bereits ein ungeteiltes persistentes Abonnement mit demselben Namen und der Client-Kennung existiert, dasselbe Thema, der Nachrichtenselektor und der noLocal-Wert bereits angegeben sind und kein Consumer bereits aktiv (d. h. nicht geschlossen) auf dem persistenten Abonnement ist, erstellt diese Methode ein bestehendes dauerhaftes Abonnement auf dem MessageConsumer.
Wenn bereits ein nicht geteiltes persistentes Abonnement mit demselben Namen und der Client-Kennung existiert und ein Konsument auf dem persistenten Abonnement bereits aktiv ist (d. h. nicht geschlossen), wird ein JMSException geworfen.
Wenn bereits ein nicht geteiltes persistentes Abonnement mit demselben Namen und Client-Kennung, aber einem anderen Subjekt, ein Nachrichtenselektor oder noLocal-Wert angegeben wurde und kein Consumer bereits aktiv (d. h. nicht geschlossen) im persistenten Abonnement ist, entspricht dies dem Abmelden (Löschen) des alten Abonnements und dem Erstellen eines neuen.
Geteilte und nicht geteilte persistente Abonnements haben möglicherweise nicht denselben Namen und dieselbe Client-Identität. Wenn bereits ein gemeinsames, persistentes Abonnement mit demselben Namen und der Client-Kennung existiert, wird ein JMSException geworfen.
Es gibt keine Begrenzung für persistente Abonnements und geteilte, nicht persistente Abonnements mit demselben Namen und demselben clientId. Ein solches Abonnement wird völlig getrennt sein.
Diese Methode ist dieselbe wie die entsprechende createDurableSubscriber-Methode, mit der Ausnahme, dass sie einen MessageConsumer statt eines TopicSubscriber zurückgibt, um den Verbraucher darzustellen.
Parameter: Themen – Nicht-temporäre Themenabonnements Name – Der Name, der zur Kennzeichnung dieses Abonnements verwendet wird Werfen: InvalidDestinationException – Wenn ein ungültiges Thema angegeben ist. IllegalStateException – Wenn die Gastkennung nicht gesetzt ist JMSException - Wenn die Sitzung scheitert, ein nicht geteiltes, persistentes Abonnement und MessageConsumer aufgrund eines internen Fehlers zu erstellen Wenn bereits ein nicht gemeinsames, persistentes Abonnement mit demselben Namen und der Client-Kennung existiert und der Konsument bereits aktiv ist Wenn bereits ein gemeinsames, persistierendes Abonnement mit demselben Namen und der Client-Kennung existiert Seit: JMS 2.0 IMessageConsumer CreateDurableConsumer(ITopic destination, Stringname, String-Selektor, bool noLocal);
wobei messageSelector der Nachrichtenselektor ist; Die noLocal-Flagge ist standardmäßig falsch, und wenn sie auf true gesetzt ist, schränkt sie die Konsumenten daran, nur Nachrichten zu erhalten, die von derselben Verbindung wie sie selbst veröffentlicht werden, was nur für Themen gilt, nicht für Warteschlangen. Name ist die eindeutige Identität des Abonnementthems, und dieser Parameter muss gesetzt werden, wenn Sie ein dauerhaftes Abonnement abschließen.
Activemq .net muss auf Paket-Download referenzieren:Der Hyperlink-Login ist sichtbar.
Vollständiger Quellcode-Download:
Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitte Antwort
|