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 false
hodnotu .
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í MsmqIntegrationBinding
mě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žadujeMsmqMessage\<byte[]>
a Stream vyžadujeMsmqMessage<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é
- Zařazování do front ve WCF
- Postupy: Výměna zpráv zařazených do fronty s koncovými body WCF
- Postupy: Výměna zpráv s koncovými body WCF a aplikací pro řazení zpráv do front
- Seskupování zpráv zařazených do fronty v relaci
- Dávkování zpráv v transakci
- Zpracování chyb přenosu zpráv pomocí front nedoručených zpráv
- Zpracování škodlivých zpráv
- Zabezpečení zpráv pomocí zabezpečení přenosu
- Zabezpečení zpráv
- Řešení problémů se zasíláním zpráv zařazovaných do front