Yineleme algılama

Bir uygulama, bir ileti gönderdikten hemen sonra önemli bir hata nedeniyle başarısız olursa ve yeniden başlatılan uygulama örneği, önceki ileti tesliminin gerçekleşmediği görüldüğü takdirde, sonraki bir gönderme aynı iletinin iki kez sistemde görünmesine neden olur.

Ayrıca, istemci veya ağ düzeyindeki bir hata daha önce gerçekleşmesi ve gönderilmiş bir iletinin sıraya teslim edilmesiyle, bildirim istemciye başarıyla döndürülmediği için de mümkündür. Bu senaryo, istemciyi gönderme işleminin sonucu hakkında şüpheli halde bırakır.

Yinelenen algılama, gönderenin aynı iletiyi yeniden göndermesini sağlayarak bu durumlardan yararlanır ve kuyruk veya konu, yinelenen kopyaları atar.

Not

Service Bus temel katmanı yinelenen saptamayı desteklemez. Standart ve Premium katmanlar yinelenen saptamayı destekler. Bu katmanlar arasındaki farklar için bkz. Service Bus fiyatlandırması.

Nasıl çalışır?

Yinelenen saptamayı etkinleştirmek, belirli bir zaman penceresi sırasında bir sıraya veya konuya gönderilen tüm iletilerin uygulama denetimli MessageID ' i izlemeye devam eder. Zaman penceresi sırasında günlüğe kaydedilen MessageID ile yeni 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ü göz önünde bulundurulmamasıdır.

Yalnızca uygulamanın, bir hata oluştuğunda öngörülebilir olarak yeniden oluşturulduğu bir iş süreci bağlamına erişmesini sağladığından, tanımlayıcının uygulama denetimi gereklidir.

Bazı uygulama bağlamını işleme sürecinde birden fazla iletinin gönderildiği bir iş süreci için, MessageID , bir satın alma siparişi numarası gibi uygulama düzeyi bağlam tanımlayıcısının bir bileşimi olabilir ve örneğin, 12345.2017/ödeme gibi ileti konusu olabilir.

MessageID her zaman bir GUID olabilir, ancak tanımlayıcıyı iş işlemine sabitleme, yinelenen algılama özelliğinin etkin bir şekilde kullanılması için istenen tahmin edilebilir yinelenebilirlik verir.

Önemli

  • Bölümlendirme etkin olduğunda, MessageId+PartitionKey benzersizliği belirlemede kullanılır. Oturumlar etkinleştirildiğinde, bölüm anahtarı ve oturum KIMLIĞI aynı olmalıdır.
  • Bölümlendirme devre dışı bırakıldığında (varsayılan), yalnızca MessageId benzersizliği belirlemede kullanılır.
  • SessionID, PartitionKey ve MessageID hakkında daha fazla bilgi için bkz. bölüm anahtarlarının kullanımı.
  • Premier katmanı bölümlemeyi desteklemez, bu nedenle uygulamalarınızda benzersiz ileti kimlikleri kullanmanızı ve yinelenen algılama için bölüm anahtarlarına güvenmenizi öneririz.

Yinelenen algılama penceresi boyutu

Yalnızca yinelenen saptamayı etkinleştirmenin yanı sıra, ileti kimliklerinin saklanacağı yinelenen algılama geçmişi zaman penceresinin boyutunu da yapılandırabilirsiniz. Bu değer, en az 7 günlük değer olacak şekilde, kuyruklar ve konular için varsayılan olarak 10 dakikadır.

Tüm kayıtlı ileti kimliklerinin yeni gönderilen ileti tanımlayıcısına karşı eşleşmesi gerektiğinden, yinelenen saptamayı etkinleştirmek ve pencerenin boyutu doğrudan sırayı (ve konu) verimini etkiler.

Pencerenin küçük tutulması, daha az ileti kimliği tutulması ve eşleştirilmesi gerektiği ve verimlilik daha az etkilenildiği anlamına gelir. Yinelenen saptamayı 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, CLı, Kaynak Yöneticisi ş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 daha önceki bir MessageID ile bir iletiyi yeniden gönderemediği senaryolarda, güvenli bir şekilde işlenebilecekleri iletiler tasarlamak önemlidir. Eşkuvvetlilik hakkında bu blog gönderisi , bunun nasıl yapılacağı hakkında çeşitli teknikler açıklamaktadır.

Azure Service Bus özellikleri araştırmak için istediğiniz dildeki örnekleri deneyin.

Aşağıdaki eski .NET ve Java istemci kitaplıkları için örnekler bulun: