Sdílet prostřednictvím


Doporučené postupy pro komunikaci ve frontě

Toto téma obsahuje doporučené postupy pro komunikaci ve frontě ve Windows Communication Foundation (WCF). Následující části diskutují o doporučených postupech z pohledu scénáře.

Rychlé zasílání zpráv ve frontě s nejlepším úsilím

Ve scénářích, které vyžadují oddělení zasílání zpráv ve frontě, poskytuje a rychlé, vysoce výkonné zasílání zpráv s zajištěním nejlepšího úsilí, použijte neaktorální frontu a nastavte ExactlyOnce vlastnost na false.

Kromě toho se můžete rozhodnout, že nebudete účtují náklady na zápisy na disk nastavením Durable vlastnosti na falsehodnotu .

Zabezpečení má vliv na výkon. Další informace najdete v tématu Důležité informace o výkonu.

Spolehlivé komplexní zasílání zpráv ve frontě

Následující části popisují doporučené postupy pro scénáře, které vyžadují komplexní spolehlivé zasílání zpráv.

Základní spolehlivý přenos

U komplexní spolehlivosti nastavte ExactlyOnce vlastnost tak, aby true se zajistil přenos. Vlastnost může být nastavena Durable na true nebo false v závislosti na vašich požadavcích (výchozí hodnota je true). Obecně platí, že Durable vlastnost je nastavena jako true součást komplexní spolehlivosti. Ohrožení zabezpečení je náklady na výkon, ale zpráva je odolná, aby se zpráva neztratila, pokud dojde k chybovému ukončení správce fronty.

Použití transakcí

Abyste zajistili komplexní spolehlivost, musíte použít transakce. ExactlyOnce záruky zajišťují, aby se zprávy doručily pouze do cílové fronty. K zajištění přijetí zprávy použijte transakce. Bez transakcí dojde-li k chybovému ukončení služby, ztratíte zprávu, která se doručuje, ale ve skutečnosti se do aplikace doručí.

Použití front nedoručených zpráv

Fronty nedoručených zpráv zajišťují, že jste upozorněni, pokud se do cílové fronty nedoručí zpráva. Můžete použít frontu nedoručených zpráv poskytovanou systémem nebo vlastní frontu nedoručených zpráv. Obecně platí, že použití vlastní fronty nedoručených zpráv je nejlepší, protože umožňuje odesílat zprávy s nedoručenou zprávou z jedné aplikace do jedné fronty nedoručených zpráv. Jinak se všechny zprávy o nedoručených zprávách, které se vyskytují pro všechny aplikace spuštěné v systému, se doručí do jedné fronty. Každá aplikace pak musí vyhledat frontu nedoručených zpráv, aby našla zprávy s nedoručenou zprávou, které jsou pro danou aplikaci relevantní. Někdy není použití vlastní fronty nedoručených zpráv proveditelné, například při použití MSMQ 3.0.

Vypnutí front nedoručených zpráv pro komplexní spolehlivou komunikaci se nedoporučuje.

Další informace naleznete v tématu Použití front nedoručených zpráv ke zpracování chyb přenosu zpráv.

Použití zpracování jedových zpráv

Zpracování otrávené zprávy poskytuje možnost zotavení od selhání zpracování zpráv.

Při použití funkce zpracování jed-zpráva, ujistěte se, že ReceiveErrorHandling je vlastnost nastavena na odpovídající hodnotu. Nastavení na to, aby Drop se data ztratila. Na druhou stranu nastavíte chybu Fault hostitele služby, když zjistí jedovatou zprávu. Použití MSMQ 3.0 je nejlepší volbou, Fault aby nedošlo ke ztrátě dat a přesunutí jedové zprávy mimo cestu. Použití MSMQ 4.0 Move je doporučeným přístupem. Move přesune otrávenou zprávu z fronty, aby služba mohl dál zpracovávat nové zprávy. Služba jed-zpráva pak může zpracovat samostatně.

Další informace naleznete v tématu Zpracování otrávené zprávy.

Dosažení vysoké propustnosti

Pokud chcete dosáhnout vysoké propustnosti v jednom koncovém bodu, použijte následující:

  • Transactované dávkování. Dávkování transakcí zajišťuje, že mnoho zpráv lze číst v jedné transakci. Tím se optimalizují potvrzení transakcí, což zvyšuje celkový výkon. Náklady na dávkování spočívá v tom, že pokud dojde k selhání v jedné zprávě v dávce, pak se celá dávka vrátí zpět a zprávy se musí zpracovat postupně, dokud nebude bezpečné je znovu dávkot. Ve většině případů jsou otrávené zprávy vzácné, takže dávkování je upřednostňovaným způsobem zvýšení výkonu systému, zejména pokud máte jiné správce prostředků, kteří se účastní transakce. Další informace naleznete v tématu Dávkování zpráv v transakci.

  • Souběžnost: Souběžnost zvyšuje propustnost, ale souběžnost má vliv také na kolize sdílených prostředků. Další informace najdete v tématu Souběžnost.

  • Omezení kapacity. Pokud chcete dosáhnout optimálního výkonu, omezte počet zpráv v kanálu dispečera. Příklad toho, jak to udělat, najdete v tématu Omezování.

Při použití dávkování mějte na paměti, že souběžnost a omezování se překládají na souběžné dávky.

Pokud chcete dosáhnout vyšší propustnosti a dostupnosti, použijte farmu služeb WCF, které čtou z fronty. To vyžaduje, aby všechny tyto služby zpřístupnily stejnou smlouvu na stejném koncovém bodu. Přístup farmy je nejvhodnější pro aplikace, které mají vysoké produkční míry zpráv, protože umožňuje, aby celá řada služeb četla ze stejné fronty.

Při použití farem mějte na paměti, že MSMQ 3.0 nepodporuje vzdálené transakce čtení. MSMQ 4.0 podporuje vzdálené transactované čtení.

Další informace naleznete v tématu Dávkování zpráv v transakci.

Řízení front pomocí sémantiky práce jednotky práce

V některých scénářích může skupina zpráv ve frontě souviset, a proto je řazení těchto zpráv významné. V takových scénářích zpracujte skupinu souvisejících zpráv společně jako jednu jednotku: všechny zprávy se úspěšně zpracovávají nebo žádné. K implementaci takového chování použijte relace s frontami.

Další informace naleznete v tématu Seskupování zpráv zařazených do fronty v relaci.

Korelace zpráv žádosti a odpovědí

I když jsou fronty obvykle jednosměrné, v některých scénářích můžete chtít korelovat odpověď přijatou na žádost poslanou dříve. Pokud takovou korelaci požadujete, doporučujeme použít vlastní hlavičku zprávy SOAP, která obsahuje informace o korelaci se zprávou. Odesílatel obvykle připojí toto záhlaví se zprávou a příjemcem, když zprávu zpracuje a odpoví zpět novou zprávou ve frontě odpovědí, připojí hlavičku zprávy odesílatele, která obsahuje informace o korelaci, aby odesílatel mohl identifikovat zprávu odpovědi se zprávou požadavku.

Integrace s aplikacemi bez WCF

Používá se MsmqIntegrationBinding při integraci služeb WCF nebo klientů se službami nebo klienty, kteří nejsou službami WCF nebo klienty. Aplikace bez WCF může být aplikace MSMQ napsaná pomocí System.Messaging, COM+, Visual Basic nebo C++.

Při použití MsmqIntegrationBindingmějte na paměti následující skutečnosti:

  • Text zprávy WCF není stejný jako text zprávy MSMQ. Při odesílání zprávy WCF pomocí vazby ve frontě se text zprávy WCF umístí do zprávy MSMQ. Infrastruktura MSMQ je pro tyto dodatečné informace obživná; zobrazí pouze zprávu MSMQ.

  • MsmqIntegrationBinding podporuje oblíbené typy serializace. Na základě typu serializace, základní typ obecné zprávy , MsmqMessage<T>přebírá různé parametry typu. Například ByteArray vyžaduje MsmqMessage\<byte[]> a Stream vyžaduje MsmqMessage<Stream>.

  • Při serializaci XML můžete určit známý typ pomocí KnownTypes atributu< u elementu chování>, který se pak používá k určení způsobu deserializace zprávy XML.

Viz také