Megosztás a következőn keresztül:


Üzenetek előkészítése és időbélyegek

A szekvenálás és az időbélyegzés két funkció, amelyek mindig engedélyezve vannak az összes Service Bus-entitáson, és a Sequence​Number fogadott vagy tallózott üzenetek tulajdonságain EnqueuedTimeUtc keresztül jelennek meg.

Azokban az esetekben, amikor az üzenetek abszolút sorrendje jelentős, és/vagy amikor a fogyasztónak megbízható egyedi azonosítóra van szüksége az üzenetekhez, a közvetítő az üzeneteket hézagmentes, az üzenetsorhoz vagy témakörhöz képest növekvő sorszámmal bélyegezi. Particionált entitások esetén a rendszer a partícióhoz viszonyítva adja ki a sorszámot.

Sorozat száma

Az SequenceNumber érték egy üzenethez rendelt egyedi 64 bites egész szám, amelyet a közvetítő elfogad és tárol, és belső azonosítóként működik. Particionált entitások esetén a legfelső 16 bit a partícióazonosítót tükrözi. A sorszámok nullára gördülnek, ha a 64 bites vagy a 48 bites tartomány (a partícióazonosító 16 bitjének kivételével) kimerült.

A sorszám egyedi azonosítóként megbízható, mivel központi és semleges szolgáltató, nem pedig ügyfelek rendelik hozzá. Az érkezés valódi sorrendjét is jelzi, és pontosabb, mint egy időbélyeg rendelési feltételként, mivel előfordulhat, hogy az időbélyegek nem rendelkeznek elég nagy felbontással szélsőséges üzenetsebességgel, és (bár minimális) óraeltérésnek lehetnek kitéve olyan helyzetekben, amikor a közvetítő tulajdonjoga átáll a csomópontok között.

Az abszolút érkezési rendelés számít például olyan üzleti helyzetekben, amikor korlátozott számú felajánlott árut szolgálnak fel érkezési sorrendben, míg a szállítások utolsók; a koncertjegyek értékesítése példa.

Időbélyegző

Az időbélyegzési képesség semleges és megbízható hatóságként működik, amely pontosan rögzíti az üzenet érkezésének UTC-idejét, amely tükröződik a EnqueuedTimeUtc tulajdonságban. Az érték akkor hasznos, ha egy üzleti forgatókönyv határidőktől függ, például azt, hogy egy munkaelemet egy bizonyos időpontban küldtek-e el éjfél előtt, de a feldolgozás messze elmarad az üzenetsor-hátraléktól.

Feljegyzés

A sorszám önmagában garantálja az üzenetsor-rendezést és az üzenetek kinyerési sorrendjét, de a munkameneteket igénylő feldolgozási sorrendet nem.

Tegyük fel, hogy 5 üzenet van az üzenetsorban, és 2 fogyasztó. A Consumer 1 az 1. üzenetet veszi fel. A Consumer 2 a 2. üzenetet veszi fel. A Consumer 2 befejezi a 2. üzenet feldolgozását, és felveszi a 3. üzenetet, míg az 1. fogyasztó még nem végzi el az 1. üzenet feldolgozását. A Consumer 2 befejezi a 3. üzenet feldolgozását, de az 1. fogyasztó még nem végzi el az 1. üzenet feldolgozását. Végül a Consumer 1 befejezi az 1. feldolgozási üzenetet. Az üzenetek feldolgozása tehát ebben a sorrendben történik: 2. üzenet, 3. üzenet és 1. üzenet. Ha az 1., a 2. és a 3. üzenetet sorrendben kell feldolgozni, munkameneteket kell használnia.

Így ha az üzeneteket csak sorrendben kell lekérni, akkor nem kell munkameneteket használnia. Ha az üzeneteket sorrendben kell feldolgozni, használjon munkameneteket. Ugyanazt a munkamenet-azonosítót az egy csoportba tartozó üzenetekre kell beállítani, amelyek lehetnek az 1., a 4. és a 8. üzenet egy halmazban, valamint a 2., a 3. és a 6. üzenet egy másik halmazban.

További információ: Service Bus-üzenet munkamenetek.

Ütemezett üzenetek

Az üzeneteket késleltetett feldolgozásra is beadhatja az üzenetsorba vagy témakörbe például azért, hogy egy ütemezett feladattal az üzenetek elérhetővé váljanak egy másik rendszer általi feldolgozásra egy bizonyos időpontban. Ez a képesség egy megbízható elosztott időalapú ütemezőt valósít meg.

Az ütemezett üzenetek csak a megadott befejezési időpontig jelennek meg az üzenetsorban. Ez előtt az ütemezett üzenetek megszakíthatók. A lemondás törli az üzenetet.

Az üzeneteket kétféleképpen ütemezheti bármelyik ügyfelünkkel:

  • Használja a normál küldési API-t, de küldés előtt állítsa be a Scheduled​Enqueue​Time​Utc tulajdonságot az üzeneten.
  • Használja az ütemezési üzenet API-t, és adja át a normál üzenetet és az ütemezett időt is. Az API visszaadja az ütemezett üzenet üzenetét SequenceNumber, amelyet később szükség esetén az ütemezett üzenet megszakítására használhat.

Az ütemezett üzenetek és azok sorszáma az üzenetek böngészésével is felderíthető.

Az SequenceNumber ütemezett üzenet csak akkor érvényes, ha az üzenet ütemezett állapotban van. Amikor az üzenet áttér az aktív állapotra, az üzenet úgy lesz hozzáfűzve az üzenetsorhoz, mintha az aktuális pillanatban lett volna leküldve, beleértve az új SequenceNumberhozzárendelést is.

Mivel a funkció az egyes üzenetekhez van rögzítve, és az üzenetek csak egyszer kérhetők le, a Service Bus nem támogatja az üzenetek ismétlődő ütemezését.

Feljegyzés

  • Az üzenet lekérdezési ideje nem jelenti azt, hogy az üzenet egyszerre lesz elküldve. A rendszer lekéri, de a tényleges küldési idő az üzenetsor számítási feladatától és állapotától függ.
  • A teljesítménybeli megfontolások miatt az ütemezett üzenetek aktiválása és törlése egymástól független, kölcsönös zárolás nélküli műveletek. Ha egy üzenet aktiválása folyamatban van, és egyidejűleg megszakad, az aktiválási folyamat nem lesz megfordítva, és az üzenet továbbra is aktiválva lesz. Emellett ez az ütemezett üzenetek negatív számához is vezethet. Ennek a versenyfeltételnek a minimalizálása érdekében javasoljuk, hogy kerülje az aktiválási és lemondási műveletek szoros egymásutánban történő ütemezését.

Ütemezett üzenetek használata munkafolyamatokkal

Gyakori, hogy a hosszabb ideig futó üzleti munkafolyamatok explicit időösszetevőt használnak, például 5 perces időtúllépéseket a kéttényezős hitelesítéshez, egyórás időtúllépéseket az e-mail-címüket megerősítő felhasználók számára, valamint több napos, heti vagy havi időtartamú összetevőket a tartományokban, például banki és biztosítási területeken.

Ezeket a munkafolyamatokat gyakran elindítja egy üzenet feldolgozása, amely aztán valamilyen állapotot tárol, majd ütemez egy üzenetet a folyamat későbbi folytatásához. Az olyan keretrendszerek, mint az NServiceBus és a MassTransit , megkönnyítik az összes elem integrálását.

A Service Bus üzenetkezelésével kapcsolatos további információkért tekintse meg az alábbi témaköröket: