Kuyruğa Alınan İletişim için En İyi Uygulamalar
Bu konuda, Windows Communication Foundation'da (WCF) kuyruğa alınmış iletişim için önerilen yöntemler sağlanır. Aşağıdaki bölümlerde, senaryo perspektifinden önerilen uygulamalar ele alınmalıdır.
Hızlı, En İyi Çaba Kuyruğa Alınmış Mesajlaşma
Kuyruğa alınan mesajlaşmanın sağladığı ayrım gerektiren senaryolar ve en iyi çaba güvencesine sahip hızlı, yüksek performanslı mesajlaşma için işlem dışı bir kuyruk kullanın ve özelliğini olarak false
ayarlayınExactlyOnce.
Ayrıca, özelliğini false
olarak ayarlayarak disk yazma maliyetlerine neden olmamasını Durable seçebilirsiniz.
Güvenliğin performans üzerinde etkileri vardır. Daha fazla bilgi için bkz . PerformansLa İlgili Önemli Noktalar.
Güvenilir Uçtan Uca Kuyruğa Alınmış Mesajlaşma
Aşağıdaki bölümlerde, uçtan uca güvenilir mesajlaşma gerektiren senaryolar için önerilen yöntemler açıklanmaktadır.
Temel Güvenilir Aktarım
Uçtan uca güvenilirlik için, aktarımı sağlamak için özelliğini olarak true
ayarlayınExactlyOnce. Durable özelliği, gereksinimlerinize bağlı olarak veya false
olarak ayarlanabilir true
(varsayılan ayardırtrue
). Genellikle özelliği Durable uçtan uca güvenilirliğin bir parçası olarak ayarlanır true
. Risk, bir performans maliyetidir, ancak bir kuyruk yöneticisinin kilitlenmesi durumunda iletinin kaybolmaması için iletiyi dayanıklı hale getirir.
İşlemlerin Kullanımı
Uçtan uca güvenilirlik sağlamak için işlemleri kullanmanız gerekir. ExactlyOnce
güvenceleri yalnızca iletilerin hedef kuyruğa teslim edilmesini sağlar. İletinin alındığından emin olmak için işlemleri kullanın. İşlemler olmadan, hizmet kilitlenirse, teslim edilen ancak aslında uygulamaya teslim edilen iletiyi kaybedersiniz.
Teslim Edilemeyen İleti Kuyruklarının Kullanımı
Teslim edilemeyen kuyruklar, bir iletinin hedef kuyruğa teslim edilememesi durumunda size bildirilmesini sağlar. Sistem tarafından sağlanan teslim edilemeyen ileti kuyruğunu veya özel bir teslim edilemeyen ileti kuyruğunu kullanabilirsiniz. Genel olarak, bir uygulamadaki teslim edilemeyen iletileri tek bir teslim edilemeyen ileti kuyruğuna göndermenizi sağladığından özel bir teslim edilemeyen ileti kuyruğu kullanmak en iyisidir. Aksi takdirde, sistemde çalışan tüm uygulamalar için oluşan tüm teslim edilemeyen iletiler tek bir kuyruğa teslim edilir. Daha sonra her uygulamanın, bu uygulamayla ilgili teslim edilemeyen iletileri bulmak için teslim edilemeyen ileti kuyruğunu araması gerekir. Bazen, MSMQ 3.0 kullanırken olduğu gibi özel bir teslim edilemeyen ileti kuyruğu kullanmak mümkün değildir.
Uçtan uca güvenilir iletişim için teslim edilemeyen ileti kuyruklarının kapatılması önerilmez.
Daha fazla bilgi için bkz . İleti Aktarım Hatalarını İşlemek için Teslim Edilemeyen İleti Kuyruklarını Kullanma.
Zehirli İleti İşlemenin Kullanımı
Zehirli ileti işleme, iletileri işleme hatasından kurtarma olanağı sağlar.
Zehirli ileti işleme özelliğini kullanırken özelliğin ReceiveErrorHandling uygun değere ayarlandığından emin olun. Bu ayarın ayarlanması Drop , verilerin kaybolduğu anlamına gelir. Öte yandan, bunu hizmet konağı zehirli bir ileti algıladığında hataya Fault neden olacak şekilde ayarlamak. MSMQ 3.0 kullanmak, Fault veri kaybını önlemek ve zehirli iletiyi yoldan çıkarmak için en iyi seçenektir. MSMQ 4.0 kullanılması Move önerilen yaklaşımdır. Move hizmetin yeni iletileri işlemeye devam edebilmesi için zehirli bir iletiyi kuyruktan çıkarır. Zehirli ileti hizmeti daha sonra zehirli iletiyi ayrı ayrı işleyebilir.
Daha fazla bilgi için bkz . Zehirli İleti İşleme.
Yüksek Aktarım Hızı Elde Etme
Tek bir uç noktada yüksek aktarım hızı elde etmek için aşağıdakileri kullanın:
İşlem toplu işleme. İşlem yapılan toplu işlem, tek bir işlemde birçok iletinin okunabilmesini sağlar. Bu işlem işlemelerini iyileştirerek genel performansı artırır. Toplu işlemenin maliyeti, bir toplu işlem içinde tek bir iletide hata oluşursa toplu işlemin tamamı geri alınır ve yeniden toplu iş yapmak güvenli olana kadar iletilerin birer birer işlenmesi gerekir. Çoğu durumda zehirli iletiler nadirdir, bu nedenle özellikle işleme katılan diğer kaynak yöneticileriniz olduğunda sistem performansını artırmanın tercih edilen yolu toplu işlemdir. Daha fazla bilgi için bkz . İşlemde İletileri Toplu İşleme.
Eşzamanlılık. Eşzamanlılık aktarım hızını artırır, ancak eşzamanlılık paylaşılan kaynaklara yönelik çekişmeleri de etkiler. Daha fazla bilgi için bkz . Eşzamanlılık.
Kısıtlama. En iyi performans için dağıtıcı işlem hattındaki ileti sayısını kısıtlayın. Bunun nasıl yapıldığını gösteren bir örnek için bkz . Azaltma.
Toplu işlem kullanırken eşzamanlılık ve azaltmanın eşzamanlı toplu işlemlere çevrildiğini unutmayın.
Daha yüksek aktarım hızı ve kullanılabilirlik elde etmek için kuyruktan okunan bir WCF hizmetleri grubu kullanın. Bu, tüm bu hizmetlerin aynı uç noktada aynı sözleşmeyi kullanıma sunduğunu gerektirir. Grup yaklaşımı, bir dizi hizmetin aynı kuyruktan okunmasını sağladığından yüksek üretim hızına sahip iletilere sahip uygulamalar için en iyi şekilde çalışır.
Grupları kullanırken MSMQ 3.0'ın uzaktan işlem yapılan okumaları desteklemediğini unutmayın. MSMQ 4.0, uzak işlem yapılan okumaları destekler.
Daha fazla bilgi için bkz . İşlemde İletileri Toplu İşleme.
İş Birimi Semantiği ile Kuyruğa Alma
Bazı senaryolarda kuyruktaki bir ileti grubu ilişkili olabilir ve bu nedenle bu iletilerin sıralanması önemlidir. Bu tür senaryolarda, bir grup ilgili iletiyi tek bir birim olarak birlikte işleyin: tüm iletiler başarıyla işlenir veya hiçbiri işlenmez. Bu tür bir davranışı uygulamak için kuyruklarla oturumları kullanın.
Daha fazla bilgi için bkz . Oturumda Kuyruğa Alınan İletileri Gruplandırma.
İstek-Yanıt İletilerini Bağıntılı Hale Getirme
Kuyruklar genellikle tek yönlü olsa da, bazı senaryolarda daha önce gönderilen bir istekle alınan yanıtı ilişkilendirmek isteyebilirsiniz. Böyle bir bağıntıya ihtiyacınız varsa, iletiyle bağıntı bilgilerini içeren kendi SOAP ileti üst bilginizi uygulamanız önerilir. Genellikle, gönderen bu üst bilgiyi iletiyle ekler ve alıcı, iletiyi işleyip yanıt kuyruğunda yeni bir iletiyle yanıt verdikten sonra, gönderenin yanıt iletisini istek iletisiyle tanımlayabilmesi için bağıntı bilgilerini içeren ileti üst bilgisini ekler.
WCF Olmayan Uygulamalarla Tümleştirme
WCF hizmetlerini veya istemcilerini WCF olmayan hizmetler veya istemcilerle tümleştirirken kullanın MsmqIntegrationBinding
. WCF olmayan uygulama System.Messaging, COM+, Visual Basic veya C++ kullanılarak yazılmış bir MSMQ uygulaması olabilir.
kullanırken MsmqIntegrationBinding
aşağıdakilere dikkat edin:
WCF ileti gövdesi, MSMQ ileti gövdesiyle aynı değildir. Kuyruğa alınmış bağlama kullanarak WCF iletisi gönderirken, WCF ileti gövdesi bir MSMQ iletisinin içine yerleştirilir. MSMQ altyapısı bu ek bilgilere karşı bilgisizdir; yalnızca MSMQ iletisini görür.
MsmqIntegrationBinding
popüler serileştirme türlerini destekler. Serileştirme türüne bağlı olarak, genel iletinin gövde türü olan , MsmqMessage<T>farklı tür parametreleri alır. Örneğin, ByteArray gerektirirMsmqMessage\<byte[]>
ve Stream gerektirirMsmqMessage<Stream>
.XML serileştirme ile, xml iletisinin seri durumdan
KnownTypes
nasıl çıkarılacağını belirlemek için kullanılan davranış> öğesinde <özniteliğini kullanarak bilinen türü belirtebilirsiniz.
Ayrıca bkz.
- WCF'de Kuyruğa Alma
- Nasıl yapılır: WCF Uç Noktaları ile Kuyruğa Alınan İletileri Gönderme ve Alma
- Nasıl yapılır: WCF Uç Noktaları ve İleti Kuyruğa Alma Uygulamaları ile İleti Alma ve Gönderme
- Oturumda Kuyruğa Alınmış İletileri Gruplandırma
- Bir İşlemde Toplu İleti İşleme
- İleti Aktarımı Hatalarını İşlemek için Teslim Edilemeyen İletiler Sırası Kullanma
- Zehirli İleti İşleme
- Aktarım Güvenliği Kullanarak İletileri Güvenli Hale Getirme
- İleti Güveliği Kullanarak İletileri Güvenli Hale Getirme
- Kuyruğa Alınan İletilerde Sorun Giderme