Node. js ve Azure-SB paketiyle Service Bus kuyruklarını kullanmaHow to use Service Bus queues with Node.js and the azure-sb package

Bu öğreticide, Azure-SB paketini kullanarak bir Service Bus kuyruğuna ileti göndermek ve ileti almak için Node. js uygulamaları oluşturmayı öğreneceksiniz.In this tutorial, you learn how to create Node.js applications to send messages to and receive messages from a Service Bus queue using the azure-sb package. Örnekler JavaScript 'te yazılır ve azure-sb paketi dahili olarak kullanan Node. js Azure modülünü kullanır.The samples are written in JavaScript and use the Node.js Azure module which internally uses the azure-sb package.

Azure-SB PAKETI Service Bus Rest çalışma zamanı API 'lerinikullanır.The azure-sb package uses Service Bus REST run-time APIs. Daha hızlı @azure/service-bus AMQP 1,0 protokolünükullanan yeni paketini kullanarak daha hızlı bir deneyim edinebilirsiniz.You can get a faster experience using the new @azure/service-bus package which uses the faster AMQP 1.0 protocol. Yeni paket hakkında daha fazla bilgi edinmek için bkz. node @azure/service-bus . js ve Package ile Service Bus kuyrukları kullanma, aksi takdirde okumaya devam etme, Azure paketini nasıl kullanacağınızı öğrenmek için.To learn more about the new package, see How to use Service Bus queues with Node.js and @azure/service-bus package, otherwise continue reading to see how to use the azure package.

ÖnkoşullarPrerequisites

  • Azure aboneliği.An Azure subscription. Bu öğreticiyi tamamlamak için bir Azure hesabınızın olması gerekir.To complete this tutorial, you need an Azure account. MSDN abone avantajlarınızı etkinleştirebilir veya ücretsiz bir hesapiçin kaydolabilirsiniz.You can activate your MSDN subscriber benefits or sign up for a free account.
  • Birlikte çalışmak için bir kuyruğunuz yoksa, bir kuyruk oluşturmak için Service Bus kuyruğu oluşturmak üzere Azure Portal kullanma adımlarını izleyin.If you don't have a queue to work with, follow steps in the Use Azure portal to create a Service Bus queue article to create a queue.
    1. Service Bus kuyruklarahızlı genel bakış konusunu okuyun.Read the quick overview of Service Bus queues.

    2. Service Bus ad alanıoluşturun.Create a Service Bus namespace.

    3. Bağlantı dizesinialın.Get the connection string.

      Not

      Bu öğreticide Node. js kullanarak Service Bus ad alanında bir sıra oluşturacaksınız.You will create a queue in the Service Bus namespace by using Node.js in this tutorial.

Node.js uygulaması oluşturmaCreate a Node.js application

Boş bir Node. js uygulaması oluşturun.Create a blank Node.js application. Node. js uygulamasının nasıl oluşturulacağı hakkında yönergeler için bkz. bir Node. js uygulamasını Azure Web sitesineveya Node. js bulut hizmetini Windows PowerShell kullanarak oluşturma ve dağıtma.For instructions on how to create a Node.js application, see Create and deploy a Node.js application to an Azure Website, or Node.js Cloud Service using Windows PowerShell.

Uygulamanızı kullanmak için yapılandırma Service BusConfigure your application to use Service Bus

Azure Service Bus kullanmak için Node. js Azure paketini indirip kullanın.To use Azure Service Bus, download and use the Node.js Azure package. Bu paket, Service Bus REST hizmetleriyle iletişim kuran bir kitaplıklar kümesi içerir.This package includes a set of libraries that communicate with the Service Bus REST services.

Paketi edinmek için düğüm Paket Yöneticisi 'Ni (NPM) kullanınUse Node Package Manager (NPM) to obtain the package

  1. Örnek uygulamanızı oluşturduğunuz c\: node\\sbqueues WebRole1 klasörüne gitmek için Node. js için Windows PowerShell komut penceresini kullanın.Use the Windows PowerShell for Node.js command window to navigate to the c:\node\sbqueues\WebRole1 folder in which you created your sample application.

  2. Komut penceresine NPM 'yi yüklemek için aşağıdaki örneğe benzer bir çıktı ile sonuçlanır:Type npm install azure in the command window, which should result in output similar to the following example:

    azure@0.7.5 node_modules\azure
        ├── dateformat@1.0.2-1.2.3
        ├── xmlbuilder@0.4.2
        ├── node-uuid@1.2.0
        ├── mime@1.2.9
        ├── underscore@1.4.4
        ├── validator@1.1.1
        ├── tunnel@0.0.2
        ├── wns@0.5.3
        ├── xml2js@0.2.7 (sax@0.5.2)
        └── request@2.21.0 (json-stringify-safe@4.0.0, forever-agent@0.5.0, aws-sign@0.3.0, tunnel-agent@0.3.0, oauth-sign@0.3.0, qs@0.6.5, cookie-jar@0.3.0, node-uuid@1.4.0, http-signature@0.9.11, form-data@0.0.8, hawk@0.13.1)
    
  3. Bir node_modules klasörünün oluşturulduğunu doğrulamak için ls komutunu kendiniz çalıştırabilirsiniz.You can manually run the ls command to verify that a node_modules folder was created. Bu klasörün içinde, Service Bus kuyruklara erişmeniz gereken kitaplıkları içeren Azure paketini bulun.Inside that folder, find the azure package, which contains the libraries you need to access Service Bus queues.

Modülü içeri aktarImport the module

Not defteri veya başka bir metin düzenleyicisi kullanarak, uygulamanın Server. js dosyasının en üstüne aşağıdakileri ekleyin:Using Notepad or another text editor, add the following to the top of the server.js file of the application:

var azure = require('azure');

Azure Service Bus bağlantısını ayarlamaSet up an Azure Service Bus connection

Azure modülü, Service Bus bağlanmak için gereken AZURE_SERVICEBUS_CONNECTION_STRING bilgileri almak için ortam değişkenini okur.The Azure module reads the environment variable AZURE_SERVICEBUS_CONNECTION_STRING to obtain information required to connect to Service Bus. Bu ortam değişkeni ayarlanmamışsa, çağırırken createServiceBusServicehesap bilgilerini belirtmeniz gerekir.If this environment variable isn't set, you must specify the account information when calling createServiceBusService.

Bir Azure Web sitesi için Azure Portal ortam değişkenlerini ayarlamaya ilişkin bir örnek için, bkz. Storage ile Node. js web uygulaması.For an example of setting the environment variables in the Azure portal for an Azure Website, see Node.js Web Application with Storage.

Kuyruk oluşturCreate a queue

Servicebusservice nesnesi Service Bus kuyruklarıyla çalışmanıza olanak sağlar.The ServiceBusService object enables you to work with Service Bus queues. Aşağıdaki kod bir Servicebusservice nesnesi oluşturur.The following code creates a ServiceBusService object. Azure modülünü içeri aktarma ifadesinden sonra, Server. js dosyasının en üstüne yakın bir şekilde ekleyin:Add it near the top of the server.js file, after the statement to import the Azure module:

var serviceBusService = azure.createServiceBusService();

createQueueIfNotExists Servicebusservice nesnesine çağırarak, belirtilen sıra döndürülür (varsa) veya belirtilen ada sahip yeni bir sıra oluşturulur.By calling createQueueIfNotExists on the ServiceBusService object, the specified queue is returned (if it exists), or a new queue with the specified name is created. Aşağıdaki kod, adlı createQueueIfNotExists myqueuesırayı oluşturmak veya bu kuyruğa bağlanmak için kullanır:The following code uses createQueueIfNotExists to create or connect to the queue named myqueue:

serviceBusService.createQueueIfNotExists('myqueue', function(error){
    if(!error){
        // Queue exists
    }
});

createServiceBusService Yöntemi Ayrıca, ileti Süresi canlı veya en yüksek sıra boyutu gibi varsayılan sıra ayarlarını geçersiz kılmanızı sağlayan ek seçenekleri de destekler.The createServiceBusService method also supports additional options, which enable you to override default queue settings such as message time to live or maximum queue size. Aşağıdaki örnek, en büyük sıra boyutunu 5 GB ve yaşam süresi (TTL) değeri olarak 1 dakika olarak ayarlar:The following example sets the maximum queue size to 5 GB, and a time to live (TTL) value of 1 minute:

var queueOptions = {
      MaxSizeInMegabytes: '5120',
      DefaultMessageTimeToLive: 'PT1M'
    };

serviceBusService.createQueueIfNotExists('myqueue', queueOptions, function(error){
    if(!error){
        // Queue exists
    }
});

FiltrelerFilters

İsteğe bağlı filtreleme işlemleri, Servicebusservicekullanılarak gerçekleştirilen işlemlere uygulanabilir.Optional filtering operations can be applied to operations performed using ServiceBusService. Filtreleme işlemleri, günlüğe kaydetme, otomatik yeniden deneme vb. içerebilir. Filtreler, imza ile bir yöntem uygulayan nesnelerdir:Filtering operations can include logging, automatically retrying, etc. Filters are objects that implement a method with the signature:

function handle (requestOptions, next)

İstek seçeneklerinde ön işlemesini gerçekleştirdikten sonra, yöntemi çağırmalıdır nextve aşağıdaki imzayla bir geri çağırma gerçekleşmelidir:After doing its pre-processing on the request options, the method must call next, passing a callback with the following signature:

function (returnObject, finalCallback, next)

Bu geri returnObject next çağırmada ve (istekten sunucuya olan yanıt) işlendikten sonra geri çağırma, diğer filtreleri işlemeye devam etmek için varsa veya hizmet çağrısını sona erdiğinde Invoke finalCallbackçağrısı yapmanız gerekir .In this callback, and after processing the returnObject (the response from the request to the server), the callback must either invoke next if it exists to continue processing other filters, or invoke finalCallback, which ends the service invocation.

Yeniden deneme mantığını uygulayan iki filtre Node. js için Azure SDK ve ExponentialRetryPolicyFilter LinearRetryPolicyFilter' a dahildir.Two filters that implement retry logic are included with the Azure SDK for Node.js, ExponentialRetryPolicyFilter and LinearRetryPolicyFilter. Aşağıdaki kod, ExponentialRetryPolicyFilterşunu kullanan ServiceBusService bir nesnesi oluşturur:The following code creates a ServiceBusService object that uses the ExponentialRetryPolicyFilter:

var retryOperations = new azure.ExponentialRetryPolicyFilter();
var serviceBusService = azure.createServiceBusService().withFilter(retryOperations);

Kuyruğa ileti göndermeSend messages to a queue

Service Bus kuyruğuna ileti göndermek için, uygulamanız sendQueueMessage servicebusservice nesnesinde yöntemini çağırır.To send a message to a Service Bus queue, your application calls the sendQueueMessage method on the ServiceBusService object. Service Bus sıralara gönderilen iletiler (ve öğesinden alınan), Brokeredmessage nesneleridir ve standart özellikler kümesi ( etiket ve TimeToLivegibi), uygulamaya özgü özel özellikleri tutmak için kullanılan bir sözlük ve Rastgele uygulama verilerinin gövdesi.Messages sent to (and received from) Service Bus queues are BrokeredMessage objects, and have a set of standard properties (such as Label and TimeToLive), a dictionary that is used to hold custom application-specific properties, and a body of arbitrary application data. Bir uygulama ileti olarak bir dize geçirerek ileti gövdesini ayarlayabilir.An application can set the body of the message by passing a string as the message. Gerekli standart özellikler varsayılan değerlerle doldurulur.Any required standard properties are populated with default values.

Aşağıdaki örnek, kullanılarak myqueue sendQueueMessageadlı sıraya bir test iletisinin nasıl gönderileceğini göstermektedir:The following example demonstrates how to send a test message to the queue named myqueue using sendQueueMessage:

var message = {
    body: 'Test message',
    customProperties: {
        testproperty: 'TestValue'
    }};
serviceBusService.sendQueueMessage('myqueue', message, function(error){
    if(!error){
        // message sent
    }
});

Service Bus kuyrukları, Standart katmanda maksimum 256 KB ve Premium katmanda maksimum 1 MB ileti boyutunu destekler.Service Bus queues support a maximum message size of 256 KB in the Standard tier and 1 MB in the Premium tier. Standart ve özel uygulama özelliklerini içeren üst bilginin maksimum dosya boyutu 64 KB olabilir.The header, which includes the standard and custom application properties, can have a maximum size of 64 KB. Bir kuyrukta tutulan ileti sayısında bir sınır yoktur ancak bir sıranın tuttuğu iletilerin toplam boyutunun bir üst sınırı vardır.There's no limit on the number of messages held in a queue but there's a cap on the total size of the messages held by a queue. Bu kuyruk boyutu, üst sınır 5 GB olacak şekilde oluşturulma zamanında belirlenir.This queue size is defined at creation time, with an upper limit of 5 GB. Kotalar hakkında daha fazla bilgi için bkz. Service Bus kotaları.For more information about quotas, see Service Bus quotas.

Kuyruktan ileti almaReceive messages from a queue

İleti, receiveQueueMessage servicebusservice nesnesinde yöntemi kullanılarak bir kuyruktan alınır.Messages are received from a queue using the receiveQueueMessage method on the ServiceBusService object. Varsayılan olarak, iletiler, okunan sırada kuyruktan silinir; Bununla birlikte, isteğe bağlı parametresini isPeekLock trueolarak ayarlayarak iletiyi, kuyruktan silmeden onu okuyabilir (Peek) ve kilitleyebilir.By default, messages are deleted from the queue as they are read; however, you can read (peek) and lock the message without deleting it from the queue by setting the optional parameter isPeekLock to true.

İletiyi alma işleminin bir parçası olarak okuma ve silmenin varsayılan davranışı en basit modeldir ve bir hata oluştuğunda bir uygulamanın bir iletiyi işlememesinin kabul edebildiği senaryolar için en iyi sonucu verir.The default behavior of reading and deleting the message as part of the receive operation is the simplest model, and works best for scenarios in which an application can tolerate not processing a message when a failure occurs. Bu davranışı anlamak için, tüketicinin alma isteğini yaptığı ve işlemeden önce çöktüğü bir senaryo düşünün.To understand this behavior, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Service Bus ileti tüketildiği gibi işaretleneceği için, uygulama yeniden başlatıldığında ve iletileri yeniden kullanmaya başladığında, kilitlenmeden önce tüketilen ileti kaçırılmış olur.Because Service Bus will have marked the message as being consumed, then when the application restarts and begins consuming messages again, it will have missed the message that was consumed before the crash.

Parametresi true olarak ayarlanırsa, alma işlemi iki aşamalı bir işlem olur ve bu da eksik iletileri kabul edemediği uygulamaları desteklemeye olanak sağlar. isPeekLockIf the isPeekLock parameter is set to true, the receive becomes a two stage operation, which makes it possible to support applications that can't tolerate missing messages. Service Bus bir istek aldığında bir sonraki kullanılacak iletiyi bulur, diğer tüketicilerin bu iletiyi almasını engellemek için kilitler ve ardından uygulamaya döndürür.When Service Bus receives a request, it finds the next message to be consumed, locks it to prevent other consumers receiving it, and then returns it to the application. Uygulama iletiyi işlemeyi tamamladıktan (veya gelecekteki işlemler için güvenilir bir şekilde depolar), yöntemi çağırarak deleteMessage alma işleminin ikinci aşamasını tamamlar ve bir parametre olarak silinecek iletiyi sağlar.After the application finishes processing the message (or stores it reliably for future processing), it completes the second stage of the receive process by calling deleteMessage method and providing the message to be deleted as a parameter. deleteMessage Yöntemi iletiyi tüketildiği gibi işaretler ve kuyruktan kaldırır.The deleteMessage method marks the message as being consumed and removes it from the queue.

Aşağıdaki örnek kullanarak receiveQueueMessageiletilerin nasıl alınacağını ve işleyeceğini gösterir.The following example demonstrates how to receive and process messages using receiveQueueMessage. Örnek öncelikle bir iletiyi alır ve siler ve ardından doğruolarak ayarla ' yı deleteMessagekullanarak isPeekLock bir ileti alır, ardından şunu kullanarak iletiyi siler:The example first receives and deletes a message, and then receives a message using isPeekLock set to true, then deletes the message using deleteMessage:

serviceBusService.receiveQueueMessage('myqueue', function(error, receivedMessage){
    if(!error){
        // Message received and deleted
    }
});
serviceBusService.receiveQueueMessage('myqueue', { isPeekLock: true }, function(error, lockedMessage){
    if(!error){
        // Message received and locked
        serviceBusService.deleteMessage(lockedMessage, function (deleteError){
            if(!deleteError){
                // Message deleted
            }
        });
    }
});

Uygulama çökmelerini ve okunmayan iletileri gidermeHow to handle application crashes and unreadable messages

Service Bus, uygulamanızda gerçekleşen hataları veya ileti işlenirken oluşan zorlukları rahat bir şekilde ortadan kaldırmanıza yardımcı olmak için işlevsellik sağlar.Service Bus provides functionality to help you gracefully recover from errors in your application or difficulties processing a message. Bir alıcı uygulaması iletiyi bir nedenden dolayı işleyebilirse, unlockMessage servicebusservice nesnesinde yöntemi çağırabilir.If a receiver application is unable to process the message for some reason, then it can call the unlockMessage method on the ServiceBusService object. Service Bus, kuyruktaki iletinin kilidini açmasına ve aynı uygulama ya da başka bir uygulama tarafından yeniden alınabileceğinden neden olur.it will cause Service Bus to unlock the message within the queue and make it available to be received again, either by the same consuming application or by another consuming application.

Ayrıca, kuyruk içinde kilitlenen bir iletiyle ilişkili bir zaman aşımı ve uygulamanın kilit zaman aşımı dolmadan önce iletiyi işleyemezse (örneğin, uygulama çökerse), Service Bus otomatik olarak iletinin kilidini açar ve bunu yapar yeniden alınmak üzere kullanılabilir.There's also a timeout associated with a message locked within the queue, and if the application fails to process the message before the lock timeout expires (for example, if the application crashes), then Service Bus will unlock the message automatically and make it available to be received again.

İleti işlendikten sonra, ancak deleteMessage Yöntem çağrılmadan önce uygulamanın çöktüğü durumda, yeniden başlatıldığında ileti uygulamaya yeniden gönderilir.In the event that the application crashes after processing the message but before the deleteMessage method is called, then the message will be redelivered to the application when it restarts. Bu yaklaşım genellikle en az bir kez işlemeolarak adlandırılır, diğer bir deyişle her ileti en az bir kez işlenir ancak belirli durumlarda aynı ileti yeniden teslim edilebilir.This approach is often called At Least Once Processing, that is, each message will be processed at least once but in certain situations the same message may be redelivered. Senaryo yinelenen işleme kabul edememesi durumunda, uygulama geliştiricilerinin yinelenen ileti teslimini işlemek için uygulamasına ek mantık eklemesi gerekir.If the scenario can't tolerate duplicate processing, then application developers should add additional logic to their application to handle duplicate message delivery. Genellikle iletinin MessageID özelliği kullanılarak elde edilir ve bu, teslim girişimleri arasında sabit kalacak.It's often achieved using the MessageId property of the message, which will remain constant across delivery attempts.

Not

Service Bus kaynaklarını Service Bus Explorerile yönetebilirsiniz.You can manage Service Bus resources with Service Bus Explorer. Service Bus gezgin, kullanıcıların bir Service Bus ad alanına bağlanmasına ve mesajlaşma varlıklarını kolay bir şekilde yönetmesine olanak tanır.The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. Araç içeri/dışarı aktarma işlevselliği gibi gelişmiş özellikler ya da konu, kuyruk, abonelik, geçiş Hizmetleri, Bildirim Hub 'ları ve Olay Hub 'larını test etme yeteneği sağlar.The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

Sonraki adımlarNext steps

Kuyruklar hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.To learn more about queues, see the following resources.