Share via


İletiler, yükler ve serileştirme

Azure Service Bus iletileri işler. İletiler yük ve meta veriler taşır. Meta veriler anahtar-değer çiftleri biçimindedir ve yükü açıklar ve Service Bus ve uygulamalara işleme yönergelerini verir. Bazen bu meta veriler yalnızca gönderenin alıcılara iletmek istediği bilgileri taşımak için yeterlidir ve yük boş kalır.

.NET ve Java için resmi Service Bus istemcilerinin nesne modeli, Service Bus'ın desteklediği kablo protokollerine ve bu protokollerden eşlenen soyut Service Bus ileti yapısını yansıtır.

Service Bus iletisi, Service Bus'ın hiçbir zaman hizmet tarafında herhangi bir biçimde işlenmeyen bir ikili yük bölümünden ve iki özellik kümesinden oluşur. Aracı özellikleri sistem tarafından önceden tanımlanmıştır. Bu önceden tanımlanmış özellikler, aracı içindeki ileti düzeyi işlevselliğini denetler veya ortak ve standartlaştırılmış meta veri öğeleriyle eşler. Kullanıcı özellikleri, uygulama tarafından tanımlanıp ayarlanabilen anahtar-değer çiftlerinden oluşan bir koleksiyon.

Önceden tanımlanmış aracı özellikleri aşağıdaki tabloda listelenmiştir. Adlar tüm resmi istemci API'leriyle ve ayrıca HTTP protokolü eşlemesinin BrokerProperties JSON nesnesinde kullanılır.

AMQP protokol düzeyinde kullanılan eşdeğer adlar parantez içinde listelenir. Aşağıdaki adlarda pascal büyük/küçük harf kullanılırken, JavaScript ve Python istemcilerinin sırasıyla deve ve yılan kovanını kullanacağını unutmayın.

Özellik Adı Tanım
ContentType (içerik türü) İsteğe bağlı olarak, RFC2045, Bölüm 5 biçimini izleyen bir tanımlayıcı ile iletinin yükünü açıklar; örneğin, application/json.
CorrelationId (bağıntı-kimliği) Bir uygulamanın, bağıntı amacıyla ileti için bir bağlam belirtmesini sağlar; örneğin, yanıtlanan iletinin MessageId değerini yansıtma.
DeadLetterSource Yalnızca teslim edilemeyen ve daha sonra teslim edilemeyen ileti kuyruğundan başka bir varlığa otomatik olarak eklenmiş iletilerde ayarlanır. İletinin teslim edilmediği varlığı gösterir. Bu özellik salt okunur durumdadır.
DeliveryCount

Bu ileti için denenen teslimat sayısı. İleti kilidinin süresi dolduğunda veya ileti alıcı tarafından açıkça bırakıldığında sayı artırılır. Bu özellik salt okunur durumdadır.

Temel alınan AMQP bağlantısı kapatıldığında teslim sayısı artırılamaz.

EnqueuedSequenceNumber Otomatik olarak uygulanan iletiler için bu özellik, iletiye ilk olarak özgün gönderim noktasında atanmış olan sıra numarasını yansıtır. Bu özellik salt okunur durumdadır.
EnqueuedTimeUtc İletinin kabul edildiği ve varlıkta depolandığı UTC anlık örneği. Bu değer, alıcı gönderenin saatine güvenmek istemediğinde yetkili ve tarafsız bir varış zamanı göstergesi olarak kullanılabilir. Bu özellik salt okunur durumdadır.
Expires​AtUtc (mutlak-süre sonu-süresi) İletinin kaldırılmak üzere işaretlendiği ve süre sonu nedeniyle varlıktan alınamadığı UTC anlık örneği. Süre sonu TimeToLive özelliği tarafından denetlenir ve bu özellik EnqueuedTimeUtc+TimeToLive'dan hesaplanır. Bu özellik salt okunur durumdadır.
Label veya Subject (konu) Bu özellik, uygulamanın iletinin amacını alıcıya e-posta konu satırına benzer şekilde standartlaştırılmış bir şekilde belirtmesini sağlar.
Locked​Until​Utc Bir kilit altında alınan iletiler için (peek-lock alma modu, önceden ayarlanmamış) bu özellik, ileti kuyrukta/abonelikte kilitli tutulana kadar UTC anlık değerini yansıtır. Kilidin süresi dolduğunda DeliveryCount artırılır ve ileti yeniden alınabilir. Bu özellik salt okunur durumdadır.
Lock​Token Kilit belirteci, aracı tarafından peek-lock alma modunda tutulan kilit başvurusudur. Belirteç, kilidi Erteleme API'siyle kalıcı olarak sabitlemek ve bu işlemle iletiyi normal teslim durumu akışından çıkarmak için kullanılabilir. Bu özellik salt okunur durumdadır.
Message​Id (ileti-kimliği) İleti tanımlayıcısı, iletiyi ve yükünü benzersiz olarak tanımlayan uygulama tanımlı bir değerdir. Tanımlayıcı serbest biçimli bir dizedir ve uygulama bağlamından türetilen bir GUID veya tanımlayıcıyı yansıtabilir. Etkinleştirilirse, yinelenen algılama özelliği aynı MessageId'ye sahip iletilerin ikinci ve daha fazla gönderimini tanımlar ve kaldırır.
Partition​Key Bölümlenmiş varlıklar için, bu değerin ayarlanması ilgili iletilerin aynı iç bölüme atanarak gönderim sırası sırasının doğru şekilde kaydedilmesini sağlar. Bölüm, bu değer yerine bir karma işlevi tarafından seçilir ve doğrudan seçılamaz. Oturum kullanan varlıklar için SessionId özelliği bu değeri geçersiz kılar.
Reply​To (yanıtla) Bu isteğe bağlı ve uygulama tanımlı değer, iletinin alıcısına bir yanıt yolu ifade etmenin standart bir yoludur. Bir gönderen yanıt beklediğinde değeri, yanıtın gönderilmesini beklediği kuyruğun veya konunun mutlak veya göreli yoluna ayarlar.
Reply​To​Session​Id (reply-to-group-id) Bu değer ReplyTo bilgilerini genişletir ve yanıt varlığına gönderildiğinde yanıt için hangi SessionId değerinin ayarlanması gerektiğini belirtir.
Scheduled​Enqueue​Time​Utc Yalnızca bir gecikmeden sonra alınabilir hale gelen iletiler için bu özellik, iletinin mantıksal olarak sıralanacağı, sıralanacağı ve bu nedenle alma için kullanılabilir hale getirileceği UTC anlık değerini tanımlar.
Sequence​Number Sıra numarası, bir iletiye atanan benzersiz bir 64 bitlik tamsayıdır; aracı tarafından kabul edilir ve gerçek tanımlayıcısı olarak depolanır. Bölümlenmiş varlıklar için en üstteki 16 bit bölüm tanımlayıcısını yansıtır. Sıra sayıları monoton olarak artar ve boşluksuz olur. 48-64 bit aralığı tükendiğinde 0'a yuvarlanır. Bu özellik salt okunur durumdadır.
Session​Id (grup kimliği) Oturum kullanan varlıklar için, bu uygulama tanımlı değer iletinin oturum ilişkilendirmesini belirtir. Aynı oturum tanımlayıcısına sahip iletiler özet kilitlemeye tabidir ve tam olarak sıralı işlemeyi ve çift yönlü işlemi etkinleştirir. Oturum tanımayan varlıklar için bu değer yoksayılır.
Time​To​Live Bu değer, enqueueTimeUtc içinde yakalandığı şekilde, iletinin kabul edildiği ve aracı tarafından depolandığı anından başlayarak, iletinin süresinin dolmasına ilişkin göreli süredir. Açıkça ayarlanmadığında, varsayılan değer ilgili kuyruk veya konu için DefaultTimeToLive değeridir. İleti düzeyi TimeToLive değeri varlığın DefaultTimeToLive ayarından uzun olamaz. Daha uzunsa sessizce ayarlanır.
To (için) Bu özellik, yönlendirme senaryolarında gelecekteki kullanım için ayrılmıştır ve şu anda aracı tarafından yoksayılır. Uygulamalar, iletinin hedeflenen mantıksal hedefini belirtmek için kural temelli otomatik zorlamalı zincirleme senaryolarında bu değeri kullanabilir.
Via​Partition​Key bir işlem kapsamındaki bir aktarım kuyruğu aracılığıyla ileti gönderilirse, bu değer aktarım kuyruğu bölümünü seçer.

Soyut ileti modeli, bir iletinin HTTPS aracılığıyla kuyruğa gönderilip AMQP aracılığıyla alınabilmesini sağlar. Her iki durumda da, ileti ilgili protokol bağlamında normal görünür. Aracı özellikleri gerektiğinde çevrilir ve kullanıcı özellikleri ilgili protokol ileti modelinde en uygun konuma eşlenir. HTTP'de kullanıcı özellikleri doğrudan HTTP üst bilgilerine ve http üst bilgilerinden eşler; AMQP'de uygulama özellikleri eşlemesine ve eşlemesinden eşlerler.

İleti yönlendirme ve bağıntı

Daha önce açıklanan aracı özelliklerinin bir alt kümesi( özellikle To, ReplyTo, ReplyToSessionId, MessageId, CorrelationIdve SessionId) uygulamaların iletileri belirli hedeflere yönlendirmesine yardımcı olmak için kullanılır. Bu özelliği göstermek için birkaç deseni göz önünde bulundurun:

  • Basit istek/yanıt: Yayımcı kuyruğa ileti gönderir ve ileti tüketicisinden yanıt bekler. Yanıtı almak için yayımcı, yanıtların teslimini beklediği bir kuyruğa sahip olur. Kuyruğun adresi, giden iletinin ReplyTo özelliğinde ifade edilir. Tüketici yanıtladığında, işlenen iletinin MessageId değerini yanıt iletisinin CorrelationId özelliğine kopyalar ve iletiyi ReplyTo özelliği tarafından belirtilen hedefe teslim eder. Bir ileti, uygulama bağlamlarına bağlı olarak birden çok yanıt verebilir.
  • Çok noktaya yayın isteği/yanıtı: Bir yayımcı, önceki düzenin bir çeşitlemesi olarak iletiyi bir konuya gönderir ve birden çok abone iletiyi kullanma hakkına sahip olur. Abonelerin her biri daha önce açıklanan şekilde yanıt verebilir. Bu düzen bulma veya roll-call senaryolarında kullanılır ve yanıtlayan genellikle kendisini bir kullanıcı özelliğiyle veya yükün içinde tanımlar. ReplyTo bir konuya işaret ederse, bu tür bir bulma yanıtları kümesi hedef kitleye dağıtılabilir.
  • Çoğullama: Bu oturum özelliği, tek bir kuyruk veya abonelik aracılığıyla ilgili iletilerin akışlarının, eşleşen SessionId değerleriyle tanımlanan her oturum (veya grup), alıcı oturumu kilit altında tutarken belirli bir alıcıya yönlendirilmesine olanak tanır. Oturumların ayrıntıları hakkında daha fazla bilgiyi burada bulabilirsiniz.
  • Çoğullamalı istek/yanıt: Bu oturum özelliği, birkaç yayımcının yanıt kuyruğu paylaşmasına olanak tanıyarak çoklu yanıtlar sağlar. Publisher, ReplyToSessionId ayarını yaparak tüketicilere bu değeri yanıt iletisinin SessionId özelliğine kopyalamaları için talimat verebilir. Yayımlama kuyruğunun veya konu başlığının oturuma duyarlı olması gerekmez. İleti gönderildikçe, yayımcı belirli bir oturum alıcısını koşullu olarak kabul ederek kuyrukta gerçekleştirilmesi için verilen SessionId ile bir oturumu özel olarak bekleyebilir.

Service Bus ad alanının içinde yönlendirme, otomatik zorlamalı zincirleme ve konu aboneliği kuralları kullanılarak gerçekleştirilebilir. Ad alanları arasında yönlendirme, Azure LogicApps kullanılarak gerçekleştirilebilir. Önceki listede belirtildiği gibi, To özelliği gelecekteki kullanım için ayrılmıştır ve sonunda aracı tarafından özel olarak etkinleştirilmiş bir özellik ile yorumlanabilir. Yönlendirme uygulamak isteyen uygulamalar bunu kullanıcı özelliklerine göre yapmalı ve To özelliğine dayanmamalıdır; ancak şimdi bunu yapmak uyumluluk sorunlarına neden olmaz.

Yük serileştirme

Aktarım sırasında veya Service Bus içinde depolandığında, yük her zaman opak, ikili bir blok olur. ContentType özelliği, uygulamaların IETF RFC2045 göre bir MIME içerik türü açıklaması olan özellik değerleri için önerilen biçimle yükü açıklamasını sağlar; örneğin, application/json;charset=utf-8.

Java veya .NET Standard değişkenlerinden farklı olarak, Service Bus API'sinin .NET Framework sürümü oluşturucuya rastgele .NET nesneleri geçirerek BrokeredMessage örnekleri oluşturmayı destekler.

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.

Eski SBMP protokolunu kullandığınızda, bu nesneler varsayılan ikili seri hale getiriciyle veya dışarıdan sağlanan bir seri hale getiriciyle serileştirilir. Nesnesi bir AMQP nesnesi olarak serileştirilir. Alıcı, beklenen türü sağlayarak GetBody<T>() yöntemiyle bu nesneleri alabilir. AMQP ile nesneler ve IDictionary<string,object> nesnelerinin AMQP grafiğinde ArrayList seri hale getirilir ve tüm AMQP istemcileri bunların kodunu çözebilir.

30 Eylül 2026'da Azure Service Bus için SBMP protokolü desteğini devre dışı bırakacağız, böylece 30 Eylül 2026'da bu protokolü artık kullanamayacaksınız. Bu tarihten önce kritik güvenlik güncelleştirmeleri ve gelişmiş özellikler sunan AMQP protokolunu kullanarak en son Azure Service Bus SDK kitaplıklarına geçiş yapın.

Daha fazla bilgi için bkz . destek kullanımdan kaldırma duyurusu.

Bu gizli serileştirme sihri kullanışlı olsa da, uygulamalar nesne serileştirmesi üzerinde açık denetime sahip olmalı ve bunları iletiye eklemeden önce nesne graflarını akışlara dönüştürmeli ve alıcı tarafında tersini yapmalıdır. Bu, birlikte çalışabilen sonuçlar verir. AMQP güçlü bir ikili kodlama modeline sahip olsa da, AMQP mesajlaşma ekosistemine bağlıdır ve HTTP istemcileri bu tür yüklerin kodunu çözme konusunda sorunlarla karşı karşıya kalır.

.NET Standard ve Java API varyantları yalnızca bayt dizilerini kabul eder, yani uygulamanın nesne serileştirme denetimini işlemesi gerekir.

İletinin yükü seri durumdan çıkarılamıyorsa, iletinin teslim edilmeden yazılması önerilir.

Sonraki adımlar

Service Bus mesajlaşması hakkında daha fazla bilgi edinmek için aşağıdaki konulara bakın: