Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 13505|Svar: 2

ActiveMQ persistenta prenumerationsinställningar

[Kopiera länk]
Publicerad på 2017-01-09 11:12:10 | | |

ActiveMQ persistenta prenumerationsinställningar
Genom att ställa in PERSISTENT-leveransläget för utgivaren kan du använda persistenta prenumerationer för prenumeranter, vilket garanterar att Pub/Sub-programmet tar emot alla publicerade meddelanden.
Meddelandeprenumerationer delas in i icke-varaktiga prenumerationer och varaktiga prenumerationer, och icke-varaktiga prenumerationer kan endast ta emot meddelanden som skickas till ett ämne när klienten är aktiv, det vill säga när klienten är offline, meddelanden som skickas till ämnet under denna period kommer att förloras och aldrig tas emot. När klienten är offline sparar ActiveMQ alla meddelanden som skickas till subjektet enligt dess ID, och när klienten ansluter till ActiveMQ igen får den alla meddelanden som skickats till subjektet när den är offline. Persistenta prenumerationer ökar overhead och har bara en aktiv användare i en persistent prenumeration åt gången. Steg för att upprätta en persistent prenumeration:
1. Skapa ett kund-ID för anslutningen;
2. Ange ett prenumerationsnamn för prenumerationens ämne;
Ovanstående kombination måste vara unik.
Kod implementerar persistenta prenumerationer

(1) När man använder kö, det vill säga vid kö, finns det bara en konsument per meddelande, så persistens är mycket enkelt, spara det bara i databasen

。 Sedan kan vilken konsument som helst plocka upp den och göra sig av med den. Det spelar ingen roll om en konsument stänger av den ett tag.

(2) När man använder topic, det vill säga vid prenumeration, kan varje meddelande ha flera konsumenter, vilket är mer besvärligt.

Först, om vi antar att konsumenter är vanliga konsumenter,
------------------------
Efter lanseringen av <1> activemq lanserades, news 1 släpptes, men tyvärr startar inga konsumenter nu, det vill säga inga konsumenter har prenumererat. Så

, övergavs nyheten.

<2> Konsument 1 startade, anslöt till activemq, prenumererade och väntade på ett meddelande~~

activemq skickar meddelande 2, OK, konsument 1 tar emot och bearbetar det. Meddelandeavhopp.

<3> Consumer 2 är också lanserad, ansluten till activemq, prenumererad och väntar på ett meddelande~~

activemq publicerar meddelande 3, OK, konsument 1, konsument 2 tas emot och bearbetas alla. Meddelandeavhopp.

<4> Konsument 1 är avstängd.

activemq postar meddelande 4, OK, konsument 2 tar emot och bearbetar det. Meddelandeavhopp.

<5> Konsument 1 startade igen.

activemq publicerar meddelanden 5, OK, konsument 1 och konsument 2 tar emot och bearbetar dem. Meddelandeavhopp.
-----------------------------
Sammanfattningsvis:
ActiveMQ skickar helt enkelt meddelanden till den nuvarande användaren.
Konsumenter som stänger av kommer att missa många meddelanden och inte kunna ta emot dem igen.

Om meddelandet som skickas är viktig användarsynkroniseringsdata och missar den, är användardatan inte synkroniserad.

Så, hur får man konsumenter att få missade meddelanden när de startar om?

Svaret är en bestående prenumeration.
-----------------------------

Vanliga prenumerationer, utan att skilja på konsumenter, om det är några huvuden i lokalen, kastar några ångade bullar.
För persistenta prenumerationer behöver du registrera användarens namn.
Zhang San sa, Jag är Zhang San, det finns ångade bullar till mig, jag kommer tillbaka och hämtar dem.
Li Si sa, jag är Li Si, det finns ångade bullar till mig, jag kommer tillbaka och hämtar dem.
activemq skrev ner namnen Zhang San och Li Si.

Sedan, när man delar ångade bullar, ger ett huvud fortfarande ett ångat bulle.
Efter delningen, när han såg att Zhang San inte talade, betydde det att han inte var där, så lämna honom en.
Li Si talade, så det fanns ingen anledning att stanna.

Zhang San kom tillbaka, letade efter activemq och tittade, det här är inte Zhang San, ta med hans ångade bullar snabbt.
Det kan vara en ångad bulle, eller 100 ångade bullar, det beror på hur många ångade bullar Zhang San har delat sedan han var borta ett tag.

activemq särskiljer konsumenter efter klientID och abonnentnamn.
-----------------------------
Skapa en koppling
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); Persistenta prenumerationer kräver att du sätter detta.
connection.start();

Skapa en session
Sessionsession = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

Skapa en destination
Ämnesämne = session.createTopic("userSyncTopic"); Ämnesnamn

MessageConsumer consumer = session.createConsumer(topic); Regelbunden prenumeration
MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Beständiga prenumerationer


En annan punkt är att producenten av meddelandet använder persistent läge när meddelanden skickas
MessageProducer producent = ...;
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Om inte, är den persistent som standard

(5) Om samma "clientID" används anses det vara samma konsument. Om två program använder samma "clientID" kan endast ett ansluta till activemq samtidigt, och den andra anslutningen rapporterar ett fel.

(6) Inställningarna i activemq är i conf/activemq.xml, och standardmeddelandena sparas i data/kahadb, och meddelandena går inte förlorade vid omstart av activemq.

Du kan komma åt http://localhost:8161/admin/index.jsp: se information om aktuella köer, ämnen och beständiga prenumeranter, skicka meddelanden och mer.

Du kan kopiera innehållet i activemq-jdbc.xml och ändra det, och du kan spara meddelandet i andra databaser.




Föregående:360-biljett som köper femte generationens VIP-kanal är spräckt, snabbt in i VIP-kön
Nästa:. .Net-plattformen
 Hyresvärd| Publicerad på 2017-01-09 13:41:53 |
1 Jämförelse av tekniska egenskaper hos kö och ämne
Namn
Ämne

Översikt
Publicera Prenumerera meddelanden Publicera prenumerationsmeddelanden
Punkt-till-punkt Punkt-till-punkt
Det finns ingen stat
Ämnesdata är som standard tillståndslösa.
Ködata sparas som en fil på MQ-servern som standard, till exempel lagras Active MQ vanligtvis under $AMQ_HOME\data\kr-store\data. Den kan också konfigureras som en databaslagring.
Integritetsgaranti
Det finns ingen garanti för att varje databit som publiceras av förlaget kommer att accepteras av prenumeranten.
Kö garanterar att varje databit kan tas emot av mottagaren.
Om meddelandet kommer att gå förlorat
Generellt sett, när en utgivare publicerar ett meddelande om ett ämne, kan endast den sub som lyssnar på ämnesadressen ta emot meddelandet. Om det inte finns någon sub som lyssnar förlorar ämnet.
Sändaren skickar ett meddelande till målkön, och mottagaren kan ta emot meddelanden på denna kö asynkront. Meddelanden i kön kommer inte att gå förlorade om det inte finns någon mottagare som kan ta emot dem för tillfället.
Policy för mottagande av meddelanden
Policyn för publicering och mottagning av en-till-många meddelanden, flera subs som lyssnar på samma ämnesadress kan ta emot meddelanden som skickas av utgivaren. Subben får notisen till mq-servern
En-till-en-policyer för meddelandepublicering och mottagning, meddelanden som skickas av en avsändare, kan endast tas emot av en mottagare. Efter att mottagaren mottagit meddelar MQ-servern MQ-servern att den har mottagits, och MQ-servern raderar eller utför andra åtgärder på meddelandena i kön.

 Hyresvärd| Publicerad på 2017-01-09 13:42:15 |
Den största skillnaden mellan ämne och kö är att ämnet är i form av sändning, där alla online-lyssningsklienter meddelas att det finns ett nytt meddelande, och klienten utan övervakning kommer inte att ta emot meddelandet; Kö, å andra sidan, meddelar en av flera lyssningsklienter på ett peer-to-peer-sätt.

2 Jämförelse av meddelandebehandlingseffektivitet mellan ämnes- och kömetoder
        Genom att öka antalet samtidighet för lyssnarklienten, kontrollera om meddelandepushen för ämnet minskar avsevärt på grund av ökningen i samtidighet för lyssnandeklienten.
        Utifrån de mätta resultaten finns det ingen signifikant skillnad i effektiviteten i att skicka och ta emot meddelanden som skickas av ämnesmetoden under premissen av en abonnent och 100 prenumeranter, men under premissen att 500 abonnenter (trådar) samtidighet är skillnaden i effektivitet uppenbar (på grund av samtidigheten med 500 trådar är CPU-användningen på min maskin så hög som 70–90 %), så det är omöjligt att bekräfta om det är en prestandaflaskhals orsakad av mitt lokala test eller en prestandaflaskhals i ämnesmeddelandessändningsmetoden, vilket resulterar i en så betydande minskning av effektiviteten).
        Det finns ingen betydande skillnad i effektiviteten i att skicka och ta emot meddelanden som skickas via ämnesmetoden och köläget under premissen av en abonnent och 100 prenumeranter, men under premissen av 500 abonnenters samtidighet är effektiviteten i ämnesläget avsevärt lägre än i kö.
        Effektiviteten i att skicka och ta emot meddelanden som skickas i kömetoden förändras inte nämnvärt under förutsättningen att en abonnent är 100 och 500 abonnenter.
Uppmätta data från ämnet:


Det totala antalet meddelanden som skickats av avsändaren
Det totala antalet meddelanden som mottagits av alla prenumeranter
Den genomsnittliga tiden det tar att skicka och ta emot meddelanden
Enskild abonnent
100
100
101 ms
100 prenumeranter
100
10000
103 ms
500 prenumeranter
100
50000
14162ms

Kömätta data:


Det totala antalet meddelanden som skickats av avsändaren
Det totala antalet meddelanden som mottagits av alla prenumeranter
Den genomsnittliga tiden det tar att skicka och ta emot meddelanden
Enskild abonnent
100
100
96 ms
100 prenumeranter
100
100
96 ms
500 prenumeranter
100
100
100 ms

Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com