Omdat het project wat data nodig heeft om te worden gepusht en ontvangen, en omdat de hoeveelheid data relatief groot is, ongeveer 3 miljoen data per dag
In het begin gebruikte ik HTTP Post om data in te sturen, maar ik vond dat het te traag was en de verzendsnelheid veel kleiner was dan de ontvangstsnelheid.
Dus als je een lange socketverbinding wilt gebruiken om data te pushen en te ontvangen, schrijf je zelf de socketserver en client, is één tijdverspilling, maar het kan niet goed worden uitgevoerd
Ten slotte wordt activemq gebruikt om data te pushen en te ontvangen
Ten eerste is de producentencode als volgt:
Consument, er zijn twee modellen:
1: Gewoon abonnement, geen persistent "abonnement" nodig, dat wil zeggen, bij het verbinden kun je berichten ontvangen, en je kunt geen berichten ontvangen vóór het verbinden, met "CreateConsumer" 2: Persistent abonnement, na het verbinden kun je data ontvangen die nog niet eerder is gepusht, via "CreateDurableConsumer"
Links naar de introductie van CreateDurableConsumer:De hyperlink-login is zichtbaar.
Maak een niet-gedeeld persistent abonnement aan op het opgegeven onderwerp als dat nog niet bestaat, en maak een consument aan op dat persistent abonnement. Deze methode maakt een persistent abonnement aan zonder een berichtselector te gebruiken, en de noLocal-waarde is onwaar. De applicatie gebruikt een persistent abonnement en moet alle berichten ontvangen die over het onderwerp zijn gepubliceerd, inclusief berichten die zijn gepubliceerd wanneer er geen actieve consumenten aan verbonden zijn. De JMS-provider houdt een registratie bij van dit persistente abonnement en zorgt ervoor dat alle berichten van de betreffende uitgever worden bewaard totdat ze aan de consument zijn geleverd en door dat persistent abonnement zijn bevestigd totdat ze zijn verlopen.
Persistente abonnementen blijven berichten verzamelen totdat ze worden verwijderd met de afmeldmethode.
Deze methode kan alleen worden gebruikt met niet-gedeelde persistente abonnementen. Alle persistente abonnementen die met deze methode worden aangemaakt, worden niet meer gedeeld. Dit betekent dat er slechts één actieve (dus niet gesloten) consument tegelijk op het abonnement kan zijn. De term "consument" duidt hier op het TopicSubscriber-, MessageConsumer- of JMSConsumer-object in elke client.
Een niet-gedeeld persistent abonnement wordt geïdentificeerd door een door de client gespecificeerde naam en een clientidentificatie die moet worden ingesteld. Applicaties die vervolgens consumenten willen aanmaken op een niet-gedeeld persistent abonnement, moeten dezelfde clientidentificatie gebruiken.
Als er al een niet-gedeeld persistent abonnement met dezelfde naam en client identifier bestaat, en hetzelfde onderwerp, berichtselector en noLocal-waarde al zijn gespecificeerd, en er is geen enkele consument al actief (d.w.z. niet gesloten) op het persistente abonnement, dan creëert deze methode een bestaand duurzaam abonnement op de MessageConsumer.
Als er al een niet-gedeeld persistent abonnement met dezelfde naam en client identifier bestaat, en er is een consument op het persistente abonnement die al actief is (d.w.z. niet gesloten), wordt een JMSException gegooid.
Als er al een niet-gedeeld persistent abonnement is met dezelfde naam en client identifier maar een ander onderwerp, een berichtselector of noLocal-waarde is gespecificeerd, en er is geen enkele consument al actief (dus niet gesloten) op het persistente abonnement, dan is dit gelijk aan het afmelden (verwijderen) van het oude en het aanmaken van een nieuw.
Gedeelde en niet-gedeelde persistente abonnementen hebben mogelijk niet dezelfde naam en clientidentiteit. Als er al een gedeeld persistent abonnement met dezelfde naam en client identifier bestaat, wordt een JMSException gegooid.
Er is geen limiet aan persistente abonnementen en gedeelde niet-persistente abonnementen met dezelfde naam en clientId. Zo'n abonnement zal volledig apart zijn.
Deze methode is hetzelfde als de bijbehorende createDurableSubscriber-methode, behalve dat deze een MessageConsumer teruggeeft in plaats van een TopicSubscriber om de consument te vertegenwoordigen.
Parameter: Thema's - Niet-tijdelijke onderwerpabonnementen naam - De naam die wordt gebruikt om dit abonnement te identificeren Gooi: InvalidDestinationException - Als een ongeldig onderwerp wordt gespecificeerd. IllegalStateException - Als de gastidentificatie niet is ingesteld JMSException - Als de sessie faalt, maakt het een niet-gedeeld persistent abonnement en MessageConsumer aan vanwege een interne fout Als er al een niet-gedeeld persistent abonnement met dezelfde naam en client identifier bestaat, en de consument al actief is Als er al een gedeeld persistent abonnement met dezelfde naam en client identifier bestaat. Sinds: JMS 2.0 IMessageConsumer CreateDurableConsumer(ITopische bestemming, stringnaam, stringselector, bool noLocal);
waarbij messageSelector de berichtselector is; De noLocal-vlag is standaard onwaar, en wanneer deze op waar staat, beperkt deze consumenten om alleen berichten te ontvangen die door dezelfde verbinding als zijzelf worden gepubliceerd, wat alleen geldt voor onderwerpen, niet voor wachtrijen. naam is de unieke identiteit van het abonnementsonderwerp, en deze parameter moet worden ingesteld wanneer je je abonneert op een persistent abonnement.
Activemq .net moet een referentiepakket downloaden:De hyperlink-login is zichtbaar.
Volledige broncode downloaden:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
|