Azure Service Bus konusuna ileti gönderme ve aboneliklerden konuya ileti alma (JavaScript)
Bu öğreticide, aşağıdaki adımları tamamlayacaksınız:
- Azure portalı ile Service Bus ad alanı oluşturma.
- Azure portalı ile Service Bus konusu oluşturma.
- Azure portalı ile bu konu için bir Service Bus aboneliği oluşturma.
- @azure/service-bus paketini kullanmak için bir JavaScript uygulaması yazın:
- Konuya bir dizi ileti gönderin.
- Bu iletileri abonelikten alın.
Not
Bu hızlı başlangıç, Service Bus konusuna toplu ileti gönderme ve bu iletileri konunun bir aboneliğinden alma gibi basit bir senaryo için adım adım yönergeler sağlar. Azure Service Bus için önceden oluşturulmuş JavaScript ve TypeScript örneklerini GitHub'daki JavaScript için Azure SDK deposunda bulabilirsiniz.
Önkoşullar
- Azure aboneliği. Bu öğreticiyi tamamlamak için bir Azure hesabınızın olması gerekir. MSDN abone avantajınızı etkinleştirebilir ya da ücretsiz hesap için kaydolabilirsiniz.
- Node.js LTS
- Hızlı Başlangıç: Azure portalını kullanarak bir Service Bus konusu ve konu başlığına abonelikler oluşturma adımlarını izleyin. Bu hızlı başlangıç için yalnızca bir abonelik kullanacaksınız.
Bu hızlı başlangıcı kendi Azure hesabınızla kullanmak için şunları yapmanız gerekir:
- Geliştirici makinenize parolasız kimlik doğrulaması sağlayan Azure CLI'yi yükleyin.
- ile terminalde veya komut isteminde Azure hesabınızla
az login
oturum açın. - Kaynağınıza uygun rolü eklerken aynı hesabı kullanın.
- Kodu aynı terminalde veya komut isteminde çalıştırın.
- Service Bus ad alanınız için konu adınızı ve aboneliğinizi not edin. Kodda buna ihtiyacınız olacak.
Not
- Bu öğretici, Nodejs kullanarak kopyalayıp çalıştırabileceğiniz örneklerle çalışır. Node.js uygulaması oluşturma yönergeleri için bkz . Node.js uygulaması oluşturma ve Azure Web Sitesine dağıtma veya Windows PowerShell kullanarak Bulut Hizmetini Node.js.
Azure portalında bir ad alanı oluşturma
Azure'da Service Bus mesajlaşma varlıklarını kullanmaya başlamak için öncelikle Azure'da benzersiz olan bir ad alanı oluşturmanız gerekir. Ad alanı, uygulamanızdaki Service Bus kaynakları (kuyruklar, konular vb.) için bir kapsam kapsayıcısı sağlar.
Ad alanı oluşturmak için:
Azure Portal’ında oturum açın.
Tüm hizmetler sayfasına gidin.
Sol gezinti çubuğunda, kategoriler listesinden Tümleştirme'yi seçin, fareyi Service Bus'ın üzerine getirin ve ardından Service Bus kutucuğundaki düğmeyi seçin+.
Ad alanı oluştur sayfasının Temel bilgiler etiketinde şu adımları izleyin:
Abonelik için ad alanının oluşturulacağı bir Azure aboneliği seçin.
Kaynak grubu için, ad alanının yaşayacağı mevcut bir kaynak grubunu seçin veya yeni bir tane oluşturun.
Ad alanı için bir ad girin. Ad alanı adı aşağıdaki adlandırma kurallarına uymalıdır:
- Adın Azure genelinde benzersiz olması gerekir. Adın kullanılabilirliği sistem tarafından hemen denetlenir.
- Ad uzunluğu en az 6 ve en fazla 50 karakterdir.
- Ad yalnızca harf, sayı, kısa çizgi "-" içerebilir.
- Ad bir harfle başlamalı ve bir harf veya numarayla bitmelidir.
- Ad "-sb" veya "-mgmt" ile bitmiyor.
Konum için ad alanınızın barındırılacağı bölgeyi seçin.
Fiyatlandırma katmanı için ad alanı için fiyatlandırma katmanını (Temel, Standart veya Premium) seçin. Bu hızlı başlangıç için Standart'ı seçin.
Önemli
Konuları ve abonelikleri kullanmak istiyorsanız Standart veya Premium'u seçin. Konular/abonelikler Temel fiyatlandırma katmanında desteklenmez.
Premium fiyatlandırma katmanını seçtiyseniz, mesajlaşma birimi sayısını belirtin. Premium katman, her iş yükünün yalıtılmış olarak çalışması için CPU ve bellek düzeyinde kaynak yalıtımı sağlar. Bu kaynak kapsayıcısı mesajlaşma birimi olarak adlandırılır. Premium ad alanında en az bir mesajlaşma birimi vardır. Her Service Bus Premium ad alanı için 1, 2, 4, 8 veya 16 mesajlaşma birimleri seçebilirsiniz. Daha fazla bilgi için bkz . Service Bus Premium Mesajlaşma.
Sayfanın alt kısmındaki Gözden geçir ve oluştur'u seçin.
Gözden geçir ve oluştur sayfasında ayarları gözden geçirin ve Oluştur'u seçin.
Kaynağın dağıtımı başarılı olduktan sonra dağıtım sayfasında Kaynağa git'i seçin.
Service Bus ad alanınızın giriş sayfasını görürsünüz.
Azure portalını kullanarak konu oluşturma
Service Bus Ad Alanı sayfasında, soldaki menüden Konular'ı seçin.
Araç çubuğunda + Konu'ya tıklayın.
Konu için bir ad girin. Diğer seçenekleri varsayılan değerlerinde bırakın.
Oluştur'u belirleyin.
Konuya abonelik oluşturma
Önceki bölümde oluşturduğunuz konuyu seçin.
Service Bus Konusu sayfasında araç çubuğunda + Abonelik'i seçin.
Abonelik oluştur sayfasında şu adımları izleyin:
Aboneliğin adı olarak S1 girin.
En fazla teslimat sayısı için 3 girin.
Ardından, aboneliği oluşturmak için Oluştur'u seçin.
Azure'da uygulamanın kimliğini doğrulama
Bu hızlı başlangıçta Azure Service Bus'a bağlanmanın iki yolu gösterilir: parolasız ve bağlantı dizesi.
İlk seçenek, Service Bus ad alanına bağlanmak için Microsoft Entra Id ve rol tabanlı erişim denetiminde (RBAC) güvenlik sorumlunuzu nasıl kullanacağınızı gösterir. Kodunuzda, yapılandırma dosyasında veya Azure Key Vault gibi güvenli bir depolama alanında sabit kodlanmış bağlantı dizesi olması konusunda endişelenmeniz gerekmez.
İkinci seçenek, Service Bus ad alanına bağlanmak için bir bağlantı dizesi nasıl kullanacağınızı gösterir. Azure'da yeniyseniz bağlantı dizesi seçeneğini daha kolay takip edebilirsiniz. Gerçek dünyadaki uygulamalarda ve üretim ortamlarında parolasız seçeneği kullanmanızı öneririz. Daha fazla bilgi için bkz . Kimlik doğrulaması ve yetkilendirme. Ayrıca, genel bakış sayfasında parolasız kimlik doğrulaması hakkında daha fazla bilgi edinebilirsiniz.
Microsoft Entra kullanıcınıza rol atama
Yerel olarak geliştirme yaparken, Azure Service Bus'a bağlanan kullanıcı hesabının doğru izinlere sahip olduğundan emin olun. İleti gönderip almak için Azure Service Bus Veri Sahibi rolüne sahip olmanız gerekir. Kendinize bu rolü atamak için Kullanıcı Erişimi Yöneticisi rolüne veya eylemi içeren Microsoft.Authorization/roleAssignments/write
başka bir role ihtiyacınız vardır. Azure portalı, Azure CLI veya Azure PowerShell'i kullanarak kullanıcıya Azure RBAC rolleri atayabilirsiniz. Kapsam genel bakış sayfasında rol atamaları için kullanılabilir kapsamlar hakkında daha fazla bilgi edinin.
Aşağıdaki örnekte rol, Azure Service Bus kaynaklarına tam erişim sağlayan kullanıcı hesabınıza atanır Azure Service Bus Data Owner
. Gerçek bir senaryoda, kullanıcılara yalnızca daha güvenli bir üretim ortamı için gereken minimum izinleri vermek için En Az Ayrıcalık İlkesi'ni izleyin.
Azure Service Bus için Azure yerleşik rolleri
Azure Service Bus için, Azure portalı ve Azure kaynak yönetimi API'sini kullanarak ad alanlarının ve tüm ilgili kaynakların yönetimi Azure RBAC modeli kullanılarak zaten korunur. Azure, Service Bus ad alanına erişim yetkisi vermek için aşağıdaki Azure yerleşik rollerini sağlar:
- Azure Service Bus Veri Sahibi: Service Bus ad alanına ve varlıklarına (kuyruklar, konular, abonelikler ve filtreler) veri erişimini etkinleştirir. Bu rolün bir üyesi kuyruklardan veya konu başlıklarından/aboneliklerden ileti gönderip alabilir.
- Azure Service Bus Veri Göndereni: Service Bus ad alanına ve varlıklarına gönderme erişimi vermek için bu rolü kullanın.
- Azure Service Bus Veri Alıcısı: Service Bus ad alanına ve varlıklarına alma erişimi vermek için bu rolü kullanın.
Özel bir rol oluşturmak istiyorsanız bkz . Service Bus işlemleri için gereken haklar.
Microsoft Entra kullanıcısını Azure Service Bus Sahibi rolüne ekleme
Microsoft Entra kullanıcı adınızı Service Bus ad alanı düzeyinde Azure Service Bus Veri Sahibi rolüne ekleyin. Kullanıcı hesabınız bağlamında çalışan bir uygulamanın kuyruğa veya konuya ileti göndermesine ve kuyruktan veya konunun aboneliğinden ileti almasına olanak tanır.
Önemli
Çoğu durumda rol atamasının Azure'a yayılması bir veya iki dakika sürer. Nadir durumlarda, sekiz dakikaya kadar sürebilir. Kodunuzu ilk kez çalıştırdığınızda kimlik doğrulama hataları alıyorsanız, birkaç dakika bekleyin ve yeniden deneyin.
Azure portalında Service Bus Ad Alanı sayfanız açık değilse ana arama çubuğunu veya sol gezintiyi kullanarak Service Bus ad alanınızı bulun.
Genel bakış sayfasında, sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin.
Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.
Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.
Sonuçları istenen role göre filtrelemek için arama kutusunu kullanın. Bu örnek için eşleşen sonucu arayın
Azure Service Bus Data Owner
ve seçin. Ardından İleri'yi seçin.Erişim ata'nın altında Kullanıcı, grup veya hizmet sorumlusu'na tıklayın ve ardından + Üye seç'e tıklayın.
İletişim kutusunda Microsoft Entra kullanıcı adınızı (genellikle user@domain e-posta adresiniz) arayın ve iletişim kutusunun alt kısmındaki Seç'i seçin.
Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.
Paketi yüklemek için Düğüm Paket Yöneticisi’ni (NPM) kullanma
Service Bus için gerekli npm paketlerini yüklemek için, yolunda bulunan
npm
bir komut istemi açın, dizini örneklerinizi almak istediğiniz klasörle değiştirin ve ardından bu komutu çalıştırın.Aşağıdaki paketleri yükleyin:
npm install @azure/service-bus @azure/identity
Konu başlığına ileti gönderme
Aşağıdaki örnek kod, Service Bus konusuna toplu ileti gönderme işlemini gösterir. Ayrıntılar için kod açıklamalarına bakın.
Yerel makinenizin bu kodda gereken parolasız kimlik doğrulamasını sağlayabilmesi için Azure CLI'lerle az login
oturum açmış olmanız gerekir.
Visual Studio Code gibi sık kullandığınız düzenleyiciyi açın
adlı
sendtotopic.js
bir dosya oluşturun ve aşağıdaki kodu bu dosyaya yapıştırın. Bu kod, konunuza bir ileti gönderir.Önemli
Parolasız kimlik bilgisi DefaultAzureCredential ile sağlanır.
const { ServiceBusClient } = require("@azure/service-bus"); const { DefaultAzureCredential } = require("@azure/identity"); // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); const topicName = "<TOPIC NAME>"; const messages = [ { body: "Albert Einstein" }, { body: "Werner Heisenberg" }, { body: "Marie Curie" }, { body: "Steven Hawking" }, { body: "Isaac Newton" }, { body: "Niels Bohr" }, { body: "Michael Faraday" }, { body: "Galileo Galilei" }, { body: "Johannes Kepler" }, { body: "Nikolaus Kopernikus" } ]; async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createSender() can also be used to create a sender for a queue. const sender = sbClient.createSender(topicName); try { // Tries to send all messages in a single batch. // Will fail if the messages cannot fit in a batch. // await sender.sendMessages(messages); // create a batch object let batch = await sender.createMessageBatch(); for (let i = 0; i < messages.length; i++) { // for each message in the array // try to add the message to the batch if (!batch.tryAddMessage(messages[i])) { // if it fails to add the message to the current batch // send the current batch as it is full await sender.sendMessages(batch); // then, create a new batch batch = await sender.createMessageBatch(); // now, add the message failed to be added to the previous batch to this batch if (!batch.tryAddMessage(messages[i])) { // if it still can't be added to the batch, the message is probably too big to fit in a batch throw new Error("Message too big to fit in a batch"); } } } // Send the last created batch of messages to the topic await sender.sendMessages(batch); console.log(`Sent a batch of messages to the topic: ${topicName}`); // Close the sender await sender.close(); } finally { await sbClient.close(); } } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
değerini Service Bus ad alanınızın bağlantı dizesi ile değiştirin
<SERVICE BUS NAMESPACE CONNECTION STRING>
.değerini konunun adıyla değiştirin
<TOPIC NAME>
.Ardından komutu bir komut isteminde çalıştırarak bu dosyayı yürütür.
node sendtotopic.js
Aşağıdaki çıkışı görmelisiniz.
Sent a batch of messages to the topic: mytopic
Abonelikten ileti alma
Yerel makinenizin bu kodda gereken parolasız kimlik doğrulamasını sağlayabilmesi için Azure CLI'lerle az login
oturum açmış olmanız gerekir.
Visual Studio Code gibi sık kullandığınız düzenleyiciyi açın
receivefromsubscription.js adlı bir dosya oluşturun ve içine aşağıdaki kodu yapıştırın. Ayrıntılar için kod açıklamalarına bakın.
const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus"); const { DefaultAzureCredential } = require("@azure/identity"); // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net"; // Passwordless credential const credential = new DefaultAzureCredential(); const topicName = "<TOPIC NAME>"; const subscriptionName = "<SUBSCRIPTION NAME>"; async function main() { // create a Service Bus client using the passwordless authentication to the Service Bus namespace const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential); // createReceiver() can also be used to create a receiver for a queue. const receiver = sbClient.createReceiver(topicName, subscriptionName); // function to handle messages const myMessageHandler = async (messageReceived) => { console.log(`Received message: ${messageReceived.body}`); }; // function to handle any errors const myErrorHandler = async (error) => { console.log(error); }; // subscribe and specify the message and error handlers receiver.subscribe({ processMessage: myMessageHandler, processError: myErrorHandler }); // Waiting long enough before closing the sender to send messages await delay(5000); await receiver.close(); await sbClient.close(); } // call the main function main().catch((err) => { console.log("Error occurred: ", err); process.exit(1); });
yerine
<SERVICE BUS NAMESPACE CONNECTION STRING>
ad alanının bağlantı dizesi ekleyin.değerini konunun adıyla değiştirin
<TOPIC NAME>
.öğesini konu başlığına aboneliğin adıyla değiştirin
<SUBSCRIPTION NAME>
.Ardından komutu bir komut isteminde çalıştırarak bu dosyayı yürütür.
node receivefromsubscription.js
Aşağıdaki çıkışı görmelisiniz.
Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus
Azure portalında Service Bus ad alanınıza gidin, alt bölmedeki Konular'a geçin ve konunuzun Service Bus Konusu sayfasını görmek için konunuzu seçin. Bu sayfada, İletiler grafiğinde 10 gelen ve 10 giden ileti görmeniz gerekir.
Bir dahaki sefere yalnızca gönderme uygulamasını çalıştırırsanız, Service Bus Konusu sayfasında 20 gelen ileti (10 yeni) ancak 10 giden ileti görürsünüz.
Bu sayfada, alt bölmede bir abonelik seçerseniz Service Bus Aboneliği sayfasına ulaşabilirsiniz. Bu sayfada etkin ileti sayısını, teslim edilemeyen ileti sayısını ve daha fazlasını görebilirsiniz. Bu örnekte, henüz bir alıcı tarafından alınmamış 10 etkin ileti vardır.
Sorun giderme
Gerekli talepler hakkında JavaScript kodunun parolasız sürümünü çalıştırırken hata alırsanız, Azure CLI komutuyla az login
oturum açtığınızdan ve Uygun rolün Azure kullanıcı hesabınıza uygulandığından emin olun.
Kaynakları temizleme
Azure portalında Service Bus ad alanınıza gidin ve Azure portalında Sil'i seçerek ad alanını ve içindeki kuyruğu silin.
Sonraki adımlar
Aşağıdaki belgelere ve örneklere bakın: