Yinelenen öğe algılaması
Bir uygulama ileti gönderdikten hemen sonra önemli bir hata nedeniyle başarısız olursa ve yeniden başlatılan uygulama örneği hatalı bir şekilde önceki ileti tesliminin gerçekleşmediğini düşünüyorsa, sonraki bir gönderme aynı iletinin sistemde iki kez görünmesine neden olur.
ayrıca istemci veya ağ düzeyinde bir hatanın bir dakika önce gerçekleşmesi ve gönderilen bir iletinin kuyruğa işlenmesi ve bildirimin istemciye başarıyla döndürülmemesi de mümkündür. Bu senaryo, istemciyi gönderme işleminin sonucu hakkında şüpheli bırakır.
Yinelenen algılama, gönderenin aynı iletiyi yeniden göndermesini sağlayarak bu durumlardan şüpheyi çıkarır ve kuyruk veya konu yinelenen kopyaları atar.
Not
Service Bus'ın temel katmanı yinelenen algılamayı desteklemez. Standart ve Premium katmanlar yinelenen öğe algılamayı destekler. Bu katmanlar arasındaki farklar için bkz . Service Bus fiyatlandırması.
Nasıl çalışır?
Yineleme algılamasını etkinleştirmek, belirli bir süre içinde bir kuyruğa veya konuya gönderilen tüm iletilerin uygulama tarafından denetlenen MessageId
değerini izlemeye yardımcı olur. Zaman penceresi sırasında günlüğe kaydedilen ile yeni MessageId
bir ileti gönderilirse, ileti kabul edildi olarak bildirilir (gönderme işlemi başarılı olur), ancak yeni gönderilen ileti anında yoksayılır ve bırakılır. İletinin MessageId
dışında başka hiçbir bölümü dikkate alınmaz.
Tanımlayıcının uygulama denetimi önemlidir, çünkü yalnızca uygulamanın bir hata oluştuğunda tahmin edilebilir şekilde yeniden oluşturulabileceği bir iş süreci bağlamı bağlamasına MessageId
izin verir.
Bazı uygulama bağlamlarını işlerken birden çok iletinin gönderildiği bir iş süreci için, MessageId
satın alma siparişi numarası gibi uygulama düzeyi bağlam tanımlayıcısının bir bileşimi ve iletinin konusu (örneğin, 12345.2017/ödeme) olabilir.
MessageId
her zaman bir GUID olabilir, ancak tanımlayıcının iş sürecine sabitlenmesi, yinelenen algılama özelliğinin etkili bir şekilde kullanılması için istenen öngörülebilir tekrarlanabilirliği sağlar.
Önemli
- Bölümleme etkinleştirildiğinde,
MessageId+PartitionKey
benzersizliği belirlemek için kullanılır. Oturumlar etkinleştirildiğinde bölüm anahtarı ve oturum kimliği aynı olmalıdır. - Bölümleme devre dışı bırakıldığında (varsayılan), yalnızca
MessageId
benzersizliği belirlemek için kullanılır. - , ve
PartitionKey
MessageId
hakkındaSessionId
bilgi için bkz. Bölüm anahtarlarını kullanma. - Bölümleme ve toplu ileti gönderme işlemlerini kullanırken, bunların herhangi bir bölüm tanımlama özelliği içermediğinden emin olmanız gerekir. Yinelenenleri kaldırma, benzersizliği belirlemek için ileti kimliklerini açıkça ayarlamaya bağlı olduğundan, yinelenenleri kaldırma ve bölümleme ile birlikte toplu işlem kullanılması önerilmez.
Not
Zamanlanmış iletiler yinelenen algılamaya dahil edilir. Bu nedenle, zamanlanmış bir ileti gönderir ve sonra yinelenen bir zamanlanmamış ileti gönderirseniz, zamanlanmamış ileti bırakılır. Benzer şekilde, zamanlanmamış bir ileti ve ardından yinelenen bir zamanlanmış ileti gönderirseniz, zamanlanmış ileti bırakılır.
Yinelenen algılama penceresi boyutu
Yinelenen algılamayı etkinleştirmenin dışında, ileti kimliklerinin tutıldığı yinelenen algılama geçmişi zaman penceresinin boyutunu da yapılandırabilirsiniz. Bu değer, kuyruklar ve konular için varsayılan olarak 10 dakikadır ve en az 20 saniye ile en fazla 7 gün arasında bir değerdir.
Yinelenen algılamanın ve pencerenin boyutunun etkinleştirilmesi, tüm kaydedilen ileti kimliklerinin yeni gönderilen ileti tanımlayıcısı ile eşleşmesi gerektiğinden kuyruk (ve konu) aktarım hızını doğrudan etkiler.
Pencereyi küçük tutmak, daha az ileti kimliklerinin saklanması ve eşleştirilmesi gerektiği ve aktarım hızının daha az etkilendiği anlamına gelir. Yinelenen algılama gerektiren yüksek aktarım hızı varlıkları için pencereyi mümkün olduğunca küçük tutmanız gerekir.
Sonraki adımlar
Azure portal, PowerShell, CLI, Resource Manager şablonu, .NET, Java, Python ve JavaScript kullanarak yinelenen ileti algılamayı etkinleştirebilirsiniz. Daha fazla bilgi için bkz . Yinelenen ileti algılamayı etkinleştirme.
İstemci kodunun öncekiyle aynı MessageId'ye sahip bir iletiyi yeniden gönderemediği senaryolarda, güvenli bir şekilde yeniden işlenebilen iletiler tasarlamak önemlidir. Bu blog gönderisi idempotence hakkında bunun nasıl yapılacağının çeşitli tekniklerini açıklar.
Azure Service Bus özelliklerini keşfetmek için örnekleri istediğiniz dilde deneyin.
- .NET için Azure Service Bus istemci kitaplığı örnekleri (en son)
- Java için Azure Service Bus istemci kitaplığı örnekleri (en son)
- Python için Azure Service Bus istemci kitaplığı örnekleri
- JavaScript için Azure Service Bus istemci kitaplığı örnekleri
- TypeScript için Azure Service Bus istemci kitaplığı örnekleri
Eski .NET ve Java istemci kitaplıkları için örnekleri burada bulabilirsiniz:
- .NET için Azure Service Bus istemci kitaplığı örnekleri (eski)
- Java için Azure Service Bus istemci kitaplığı örnekleri (eski)
30 Eylül 2026'da Azure SDK yönergelerine uymayan WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus ve com.microsoft.azure.servicebus Azure Service Bus SDK kitaplıklarını kullanımdan kaldıracağız. Ayrıca SBMP protokolünün desteğini de sonlandıracağız, bu nedenle 30 Eylül 2026'da bu protokolü artık kullanamayacaksınız. Bu tarihten önce kritik güvenlik güncelleştirmeleri ve geliştirilmiş özellikler sunan en son Azure SDK kitaplıklarına geçiş yapın.
Eski kitaplıklar 30 Eylül 2026'dan sonra da kullanılabilir olsa da artık Microsoft'tan resmi destek ve güncelleştirmeler almayacaktır. Daha fazla bilgi için bkz . destek kullanımdan kaldırma duyurusu.