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

Bu öğreticide, Node.js uygulamalarını kullanarak bir Service Bus kuyruğu iletileri almak ve ileti göndermek için nasıl oluşturulacağını öğrenin azure sb paket.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 dilinde yazılmıştır ve Node.js kullanma Azure Modülü , dahili olarak kullandığı azure-sb paket.The samples are written in JavaScript and use the Node.js Azure module which internally uses the azure-sb package.

Azure sb paketini kullanan hizmet veri yolu REST çalışma zamanı API'ları.The azure-sb package uses Service Bus REST run-time APIs. Yeni kullanarak daha hızlı deneyimi elde edebilirsiniz @azure/service-bus daha hızlı kullanan paket AMQP 1.0 protokol.You can get a faster experience using the new @azure/service-bus package which uses the faster AMQP 1.0 protocol. Yeni paketi hakkında daha fazla bilgi için bkz: Node.js ile Service Bus kuyruklarını kullanma ve @azure/service-bus paket, aksi takdirde nasıl kullanacağınızı görmek için okumaya devam azure paket.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. Etkinleştirebilir, MSDN abone Avantajlarınızı veya kaydolun bir ücretsiz bir hesap.You can activate your MSDN subscriber benefits or sign up for a free account.
  • Çalışmak için bir kuyruk yoksa, izleyeceğiniz adımlar Service Bus kuyruğuna oluşturmak için Azure portalını kullanın makalenin bir kuyruk oluşturun.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. Hızlı Okuma genel bakış Service Bus kuyrukları.Read the quick overview of Service Bus queues.

    2. Hizmet veri yolu oluşturma ad alanı.Create a Service Bus namespace.

    3. Alma bağlantı dizesi.Get the connection string.

      Not

      Oluşturacağınız bir kuyruk Bu öğreticide Node.js kullanarak Service Bus ad alanında.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. Bir Node.js uygulaması oluşturma hakkında yönergeler için bkz: oluşturun ve bir Azure Web sitesine bir Node.js uygulaması dağıtma, veya [Node.js bulut hizmeti] Node.js Cloud Service Windows PowerShell kullanarak.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.

Service Bus hizmetini kullanmak için uygulamanızı yapılandırmaConfigure your application to use Service Bus

Azure Service Bus hizmetini kullanmak için indirin ve Node.js Azure paketi kullanın.To use Azure Service Bus, download and use the Node.js Azure package. Bu paket, hizmet veri yolu REST Hizmetleri ile iletişim kuran bir dizi içerir.This package includes a set of libraries that communicate with the Service Bus REST services.

Bir paketi almasını düğüm paketi Yöneticisi'ni (NPM) kullanınUse Node Package Manager (NPM) to obtain the package

  1. Kullanım Node.js için Windows PowerShell gitmek için komut penceresinde c:\düğüm\sbqueues\WebRole1 örneğinizi oluşturduğunuz klasör uygulama.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. Tür npm yükleme azure komut penceresinde, neden çıktı aşağıdaki örneğe benzer: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 Bul azure Service Bus kuyruklarına erişmek için ihtiyacınız olan kitaplıkları içeren paket.Inside that folder, find the azure package, which contains the libraries you need to access Service Bus queues.

Modülü içeri aktarınImport the module

Not Defteri veya başka bir metin düzenleyicisi kullanarak, aşağıdaki üst kısmına ekleyin server.js uygulamanın dosya:Using Notepad or another text editor, add the following to the top of the server.js file of the application:

var azure = require('azure');

Bir Azure Service Bus bağlantısı kurmaSet up an Azure Service Bus connection

Azure modülünü ortam değişkenini okur AZURE_SERVICEBUS_CONNECTION_STRING Service Bus'a bağlanmak için gereken bilgileri elde edilir.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 ayarlanmadıysa çağırırken hesap bilgilerini belirtmelisiniz createServiceBusService.If this environment variable isn't set, you must specify the account information when calling createServiceBusService.

Ortam değişkenlerini ayarlama bir örnek için [Azure portalında] Azure portal bir Azure Web sitesi için bkz: [depolama ile Node.js Web uygulaması] Node.js Web Application with Storage.For an example of setting the environment variables in the Azure portal for an Azure Website, see Node.js Web Application with Storage.

Bir kuyruk oluşturmaCreate a queue

ServiceBusService nesnesi, Service Bus kuyrukları ile çalışmanıza olanak sağlar.The ServiceBusService object enables you to work with Service Bus queues. Aşağıdaki kod oluşturur bir ServiceBusService nesne.The following code creates a ServiceBusService object. En ekleme server.js dosya, Azure modülü içeri aktarmak için deyim sonra:Add it near the top of the server.js file, after the statement to import the Azure module:

var serviceBusService = azure.createServiceBusService();

Çağırarak createQueueIfNotExists üzerinde ServiceBusService nesne, belirtilen sırada döndürülen (varsa) veya belirtilen ada sahip yeni bir kuyruk 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 createQueueIfNotExists oluşturmak veya adlı kuyruğa bağlanmak myqueue: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, Canlı ya da en büyük sıra boyutu ileti süresi gibi varsayılan kuyruk ayarlarını geçersiz kılmak etkinleştirdiğiniz ek seçenekler 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 boyutu 5 GB ve bir saat 1 dakika (TTL) değerini Canlı 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 kullanılarak gerçekleştirilen işlemler için uygulanabilir ServiceBusService.Optional filtering operations can be applied to operations performed using ServiceBusService. Filtreleme işlemleri içerebilir günlüğe kaydetme, otomatik olarak yeniden deneniyor, vs. 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)

Ön işleme istek seçenekleri yaptıktan sonra yöntemini çağırmalı next, bir geri çağırma imzayla geçirme: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)

İşleme sonra bu geri çağırma returnObject (istek sunucuya yanıt), geri çağırma ya da çağırmalıdır next diğer filtrelerle işleme devam etmek için veya çağırma varsa finalCallback, hizmet çağrılmasını sonlandırır .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.

Node.js için Azure SDK ile birlikte yeniden deneme mantığını iki filtre ExponentialRetryPolicyFilter ve LinearRetryPolicyFilter.Two filters that implement retry logic are included with the Azure SDK for Node.js, ExponentialRetryPolicyFilter and LinearRetryPolicyFilter. Aşağıdaki kod oluşturur bir ServiceBusService kullanan nesne ExponentialRetryPolicyFilter: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

Uygulama çağrılarınızı, bir Service Bus kuyruğuna bir ileti göndermek için sendQueueMessage metodunda ServiceBusService nesne.To send a message to a Service Bus queue, your application calls the sendQueueMessage method on the ServiceBusService object. Gönderilen (ve öğesinden alınan) hizmet sıraları Bus iletileri BrokeredMessage nesneleri ve yüklü bir standart özellikler kümesi (gibi etiket ve TimeToLive), Özel uygulamaya özgü özellikler ve rastgele uygulama verileri gövdesi tutmak için kullanılan sözlüğü.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, bir dize iletisi olarak geçirerek ileti gövdesini ayarlayabilirsiniz.An application can set the body of the message by passing a string as the message. Gerekli tüm standart özellikleri varsayılan değerlerle doldurulur.Any required standard properties are populated with default values.

Aşağıdaki örnekte adlı kuyruk için bir test iletisi göndermek nasıl gösterir myqueue kullanarak sendQueueMessage: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. Kuyrukta tutulan ileti sayısına bir sınır yoktur ancak kuyruk tarafından tutulan iletilerin toplam boyutu bir sınır yoktur.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.

Bir kuyruktan ileti almaReceive messages from a queue

İletilerin kullanarak bir sıraya alındığı receiveQueueMessage metodunda ServiceBusService nesne.Messages are received from a queue using the receiveQueueMessage method on the ServiceBusService object. Okunurlar gibi varsayılan olarak, ileti kuyruktan silinir; Ancak, (Özet) okuyun ve iletiyi kuyruktan isteğe bağlı parametresi ayarlanarak silmeden kilitleme isPeekLock için true.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.

Okuma ve ileti alma işleminin bir parçası olarak silmeye varsayılan davranışı en basit modeldir ve uygulamanın hata oluştuğunda bir iletinin işlenmemesine dayanabilir senaryolar için en iyi şekilde çalışır.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 hangi tüketici alma isteği bildirdiğini ve ardından işlenmeden önce kilitleniyor 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 iletiyi kullanılıyor olarak işaretleyeceğinden, uygulama yeniden başlatılıp iletileri tekrar kullanmaya başladığında ardından bunu önce çökmenin kullanılan iletiyi atlamış 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.

Varsa isPeekLock parametrenin ayarlanmış true, alma, atlanan iletilere veremeyen uygulamaları desteklemenin mümkün kılar bir iki aşamalı işlemi haline gelir.If 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 sonra (veya güvenilir bir şekilde işlemek üzere depolar sonra) çağırarak alma işleminin ikinci aşamasını tamamlar deleteMessage yöntemi ve iletiyi bir parametre olarak silinmesini 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 kullanılıyor olarak 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 örneği kullanarak iletileri almak ve işlemek nasıl gösterir receiveQueueMessage.The following example demonstrates how to receive and process messages using receiveQueueMessage. Örnek ilk alır ve bir ileti siler ve ardından bir iletiyi kullanarak alan isPeekLock kümesine true, ardından iletiyi kullanarak siler deleteMessage: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. Alıcı uygulamanın iletiyi işlemek için herhangi bir nedenle silemiyor sonra çağırabilirsiniz unlockMessage metodunda ServiceBusService nesne.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'ın Kuyruktaki iletinin kilidini açmasına ve iletiyi aynı kullanıcı uygulama veya başka bir kullanıcı uygulama tarafından tekrar alınabilir hale 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 kuyrukta kilitlenen iletiye ilişkin bir zaman aşımı yoktur ve uygulama başarısız olursa (örneğin, uygulama çökerse), kilit zaman aşımı önce iletiyi süresi ve Service Bus otomatik olarak iletinin kilidini açmasına ve yapın tekrar 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.

Uygulama iletiyi ancak önce çökmesi durumunda, deleteMessage yöntemi çağrılır, ardından yeniden başlatıldığında ileti uygulamaya yeniden teslim edilebilir.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 adlandırılır en az bir kez işleme, 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şlemeyi kabul etmiyorsa, uygulama geliştiricilerinin yinelenen ileti teslimine izin vermek, uygulamaya ek mantık eklemelisiniz.If the scenario can't tolerate duplicate processing, then application developers should add additional logic to their application to handle duplicate message delivery. Genellikle kullanılarak gerçekleştirilir MessageID özelliğini iletinin teslim denemeleri arasında sabit kalır.It's often achieved using the MessageId property of the message, which will remain constant across delivery attempts.

Not

Service Bus kaynakları ile yönetebileceğiniz hizmet veri yolu Gezgini.You can manage Service Bus resources with Service Bus Explorer. Hizmet veri yolu Gezgini, bir Service Bus ad alanınıza bağlanın ve mesajlaşma varlıkları kolay bir şekilde yönetmek kullanıcıların sağlar.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şlevleri veya konu, kuyruklar, abonelikler, geçiş hizmetleri, bildirim hub'ları ve olay hub'ları test etme olanağı gibi gelişmiş özellikler 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.