Aracılığıyla paylaş


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 falseayarlayınExactlyOnce.

Ayrıca, özelliğini falseolarak 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 MsmqIntegrationBindingaş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 gerektirir MsmqMessage\<byte[]> ve Stream gerektirir MsmqMessage<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.