Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 13505|Svar: 2

ActiveMQ persistent abonnementsindstillinger

[Kopier link]
Opslået på 09/01/2017 11.12.10 | | |

ActiveMQ persistent abonnementsindstillinger
Ved at sætte PERSISTENT leveringsmode for udgiveren kan du bruge persistente abonnementer til abonnenter, hvilket sikrer, at Pub/Sub-programmet modtager alle publicerede beskeder.
Beskedabonnementer opdeles i ikke-varige og varige abonnementer, og ikke-varige abonnementer kan kun modtage beskeder sendt til et emne, når klienten er aktiv, det vil sige, når klienten er offline, vil beskeder sendt til emnet i denne periode gå tabt og aldrig modtages. Når klienten er offline, gemmer ActiveMQ alle beskeder sendt til subjektet i henhold til dens ID, og når klienten igen forbinder til ActiveMQ, vil den modtage alle beskeder sendt til subjektet, når den er offline. Vedvarende abonnementer øger overhead og har kun én aktiv bruger i et vedvarende abonnement ad gangen. Trin til at etablere et vedvarende abonnement:
1. Opret et kunde-ID for forbindelsen;
2. Angiv et abonnementsnavn for emnet for abonnementet;
Ovenstående kombination skal være unik.
Kode implementerer vedvarende abonnementer

(1) Når man bruger kø, altså ved kø, er der kun én forbruger pr. besked, så persistens er meget simpel, bare gem det i databasen

。 Derefter kan enhver forbruger hente den og bortskaffe den. Det er ligegyldigt, om en forbruger slukker den i et stykke tid.

(2) Når man bruger topic, altså ved abonnement, kan hver besked have flere forbrugere, hvilket er mere problematisk.

For det første, forudsat at forbrugerne er almindelige forbrugere,
------------------------
Efter lanceringen af <1> activemq blev lanceret, news 1 blev udgivet, men desværre starter ingen forbrugere nu, det vil sige, ingen forbrugere har abonneret. Så

, nyheden blev opgivet.

<2> Forbruger 1 startede, forbandt til activemq, abonnerede og ventede på en besked~~

activemq sender besked 2, OK, forbruger 1 modtager og behandler den. Beskedforladelse.

<3> Consumer 2 er også lanceret, forbundet til activemq, abonneret og venter på en besked~~

activemq offentliggør besked 3, OK, forbruger 1, forbruger 2 modtages og behandles. Beskedforladelse.

<4> Forbruger 1 er slået fra.

activemq poster besked 4, OK, forbruger 2 modtager og behandler den. Beskedforladelse.

<5> Forbruger 1 startede igen.

activemq offentliggør beskeder 5, OK, forbruger 1 og forbruger 2 modtager og behandler dem alle. Beskedforladelse.
-----------------------------
For at opsummere:
ActiveMQ sender blot beskeder til den nuværende forbruger.
Forbrugere, der slukker, vil gå glip af mange beskeder og vil ikke kunne modtage dem igen.

Hvis den sendte besked er vigtig brugersynkroniseringsdata og misser den, er brugerdataene ikke synkroniseret.

Så hvordan får du forbrugerne til at modtage ubesvarede beskeder, når de genstarter?

Svaret er et vedvarende abonnement.
-----------------------------

Almindelige abonnementer, uden at skelne mellem forbrugere, hvis der er et par hoveder i lokalet, kaster et par dampede boller.
For vedvarende abonnementer skal du registrere forbrugerens navn.
Zhang San sagde: Jeg er Zhang San, der er dampede boller til mig, jeg kommer tilbage og henter dem.
Li Si sagde, jeg er Li Si, der er dampede boller til mig, jeg kommer tilbage og henter dem.
activemq skrev navnene Zhang San og Li Si ned.

Når man så deler dampede boller, giver det ene hoved stadig en dampet bolle.
Efter delingen, da han så, at Zhang San ikke talte, betød det, at han ikke var der, så lad ham være en.
Li Si talte, så der var ingen grund til at blive.

Zhang San kom tilbage, ledte efter activemq og kiggede, det her er ikke Zhang San, hent hans dampede boller hurtigt.
Det kan være én dampet bolle, eller det kan være 100 dampede boller, det afhænger af, hvor mange dampede boller Zhang San har delt siden han forlod i et stykke tid.

activemq skelner forbrugere efter klientID og abonnentnavn.
-----------------------------
Skab en forbindelse
forbindelse = forbindelseFabrik.skabeForbindelse();
connection.setClientID("bbb"); Vedvarende abonnementer kræver, at du sætter dette.
connection.start();

Opret en session
Sessionssession = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Skab en destination
Emneemne = session.createTopic("userSyncTopic"); Emnenavn

MessageConsumer consumer = session.createConsumer(topic); Almindeligt abonnement
MessageConsumer forbruger = session.createDurableSubscriber(topic,"bbb"); Vedvarende abonnementer


Et andet punkt er, at producenten af beskeden bruger persistent tilstand, når han sender beskeder
MessageProducer producer = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Hvis ikke, er den som standard vedvarende

(5) Hvis det samme "clientID" bruges, betragtes det som den samme forbruger. Hvis to programmer bruger det samme "clientID", kan kun ét forbinde til activemq på samme tid, og den anden forbindelse vil rapportere en fejl.

(6) Indstillingerne i activemq er i conf/activemq.xml, og standardbeskederne gemmes i data/kahadb, og beskederne går ikke tabt ved genstart af activemq.

Du kan få adgang til http://localhost:8161/admin/index.jsp: se information om aktuelle køer, emner og vedvarende abonnenter, sende beskeder og mere.

Du kan kopiere indholdet i activemq-jdbc.xml og ændre det, og du kan gemme beskeden i andre databaser.




Tidligere:360-billet-snuppende femte generations VIP-kanal knækket, hurtigt ind i VIP-køen
Næste:. .Net-platformen
 Udlejer| Opslået på 09/01/2017 13.41.53 |
1 Sammenligning af tekniske karakteristika for kø og emne
Navn
Emne

Oversigt
Publicer Abonner beskeder Udgiv abonnementsbeskeder
Punkt-til-punkt Punkt-til-punkt
Der findes ingen stat
Emnedata er som standard tilstandsløse.
Kødata gemmes som standard som en fil på MQ-serveren, for eksempel gemmes Active MQ normalt under $AMQ_HOME\data\kr-store\data. Den kan også konfigureres som en database-butik.
Integritetsgaranti
Der er ingen garanti for, at alle data, der udgives af udgiveren, vil blive accepteret af abonnenten.
Kø garanterer, at alle datastykker kan modtages af modtageren.
om budskabet vil gå tabt
Generelt, når en udgiver udgiver en besked om et emne, kan kun den sub, der lytter til emneadressen, modtage beskeden. Hvis der ikke er nogen sub, der lytter, går emnet tabt.
Afsenderen sender en besked til målkøen, og modtageren kan modtage beskeder på denne kø asynkront. Beskeder på køen vil ikke gå tabt, hvis der ikke er nogen modtager til at modtage dem for tiden.
Modtagelsespolitik for beskedudgivelse
One-to-many message publicering og modtagelsespolitik, flere subreddits, der lytter til samme emneadresse, kan modtage beskeder sendt af udgiveren. Subben modtager notifikationen til mq-serveren
En-til-en meddelelser for udgivelse og modtagelse af beskeder, beskeder sendt af en afsender, kan kun modtages af én modtager. Efter modtageren har modtaget, underretter MQ-serveren MQ-serveren om, at den er modtaget, og MQ-serveren sletter eller foretager andre handlinger på beskederne i køen.

 Udlejer| Opslået på 09/01/2017 13.42.15 |
Den største forskel mellem emne og kø er, at emnet er i form af udsendelse, hvor alle online lytteklienter får besked om, at der er en ny besked, og klienten uden overvågning modtager ikke beskeden; Køen, derimod, giver besked til en af flere lytteklienter på en peer-to-peer-måde.

2 Sammenligning af meddelelsesbehandlingseffektivitet mellem emne- og kømetoder
        Ved at øge antallet af samtidighed for lytteklienten, kan du verificere, om emnets beskedpush vil falde markant på grund af stigningen i samtidighed for lytteklienten.
        Ud fra de målte resultater er der ingen væsentlig forskel i effektiviteten af at sende og modtage beskeder sendt af topic-metoden under forudsætning af én abonnent og 100 abonnenter, men under forudsætningen af 500 abonnenters (tråde) samtidighed er effektivitetsforskellen åbenlys (på grund af samtidigheden på 500 tråde er CPU-brugsraten på min maskine så høj som 70-90 %), så det er umuligt at bekræfte, om det er en ydelsesflaskehals forårsaget af min lokale test eller en performanceflaskehals i emne-beskedafsendelsesmetoden, hvilket resulterer i et så markant fald i effektivitet).
        Der er ingen væsentlig forskel i effektiviteten af at sende og modtage beskeder sendt via emnemetode og køtilstand under forudsætning af én abonnent og 100 abonnenter, men under forudsætningen af 500 abonnenters samtidighed er effektiviteten af emnetilstand betydeligt lavere end køens effektivitet.
        Effektiviteten ved at sende og modtage beskeder sendt i kømetoden ændrer sig ikke væsentligt under forudsætning af én abonnent, 100 abonnenter og 500 abonnenter.
Emnemålte data:


Det samlede antal beskeder sendt af afsenderen
Det samlede antal beskeder modtaget af alle abonnenter
Den gennemsnitlige tid, det tager at sende og modtage beskeder
Enkelt abonnent
100
100
101ms
100 abonnenter
100
10000
103ms
500 abonnenter
100
50000
14162ms

Kømålte data:


Det samlede antal beskeder sendt af afsenderen
Det samlede antal beskeder modtaget af alle abonnenter
Den gennemsnitlige tid, det tager at sende og modtage beskeder
Enkelt abonnent
100
100
96ms
100 abonnenter
100
100
96ms
500 abonnenter
100
100
100 ms

Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com