Ruby ile Service Bus kuyruklarını kullanmaHow to use Service Bus queues with Ruby

Bu öğreticide, bir Service Bus kuyruğundaki iletileri alıp ileti göndermek için Ruby uygulamalarının nasıl oluşturulacağını öğrenin.In this tutorial, you learn how to create Ruby applications to send messages to and receive messages from a Service Bus queue. Örnekler, Ruby'de yazılan ve Azure gem kullanır.The samples are written in Ruby and use the Azure gem.

ÖnkoşullarPrerequisites

  1. 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.
  2. İzleyeceğiniz adımlar Service Bus kuyruğuna oluşturmak için Azure portalını kullanın makalesi.Follow steps in the Use Azure portal to create a Service Bus queue article.
    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 Ruby kullanarak Service Bus ad alanında.You will create a queue in the Service Bus namespace by using Ruby in this tutorial.

Ruby uygulaması oluşturmaCreate a Ruby application

Yönergeler için Azure'da Ruby uygulaması oluşturma.For instructions, see Create a Ruby Application on Azure.

Service Bus kullanmak için uygulamanızı yapılandırmaConfigure Your application to Use Service Bus

Service Bus hizmetini kullanmak için indirin ve depolama REST Hizmetleri ile iletişim kuran bir dizi kolaylık içeren Azure Ruby paketi kullanın.To use Service Bus, download and use the Azure Ruby package, which includes a set of convenience libraries that communicate with the storage REST services.

Paketi edinmek için RubyGems kullanmaUse RubyGems to obtain the package

  1. PowerShell (Windows), Terminal (Mac) veya Bash (Unix) gibi bir komut satırı arabirimi kullanın.Use a command-line interface such as PowerShell (Windows), Terminal (Mac), or Bash (Unix).
  2. Gem ve bağımlılıklarını yüklemek için komut penceresinde "gem yükleme azure" yazın.Type "gem install azure" in the command window to install the gem and dependencies.

Paketi içeri aktarmaImport the package

Metin düzenleyiciyi kullanarak, depolama alanı kullanmayı düşündüğünüz Ruby dosyasının en üstüne aşağıdakileri ekleyin:Using your favorite text editor, add the following to the top of the Ruby file in which you intend to use storage:

require "azure"

Service Bus bağlantı kurmaSet up a Service Bus connection

Ad alanı değerlerini, anahtar, anahtar, imzalayan ve ana bilgisayar adını ayarlamak için aşağıdaki kodu kullanın:Use the following code to set the values of namespace, name of the key, key, signer and host:

Azure.configure do |config|
  config.sb_namespace = '<your azure service bus namespace>'
  config.sb_sas_key_name = '<your azure service bus access keyname>'
  config.sb_sas_key = '<your azure service bus access key>'
end
signer = Azure::ServiceBus::Auth::SharedAccessSigner.new
sb_host = "https://#{Azure.sb_namespace}.servicebus.windows.net"

Ad alanı değeri, URL'nin tamamı yerine oluşturduğunuz değere ayarlayın.Set the namespace value to the value you created rather than the entire URL. Örneğin, "yourexamplenamespace" , olmayan "yourexamplenamespace.servicebus.windows.net".For example, use "yourexamplenamespace", not "yourexamplenamespace.servicebus.windows.net".

Bir kuyruk oluşturmaHow to create a queue

Azure::ServiceBusService nesnesi kuyrukları ile çalışmanıza olanak sağlar.The Azure::ServiceBusService object enables you to work with queues. Bir kuyruk oluşturmak için kullanın create_queue() yöntemi.To create a queue, use the create_queue() method. Aşağıdaki örnek, bir sıra oluşturur veya tüm hataları yazdırır.The following example creates a queue or prints out any errors.

azure_service_bus_service = Azure::ServiceBus::ServiceBusService.new(sb_host, { signer: signer})
begin
  queue = azure_service_bus_service.create_queue("test-queue")
rescue
  puts $!
end

De geçirebilirsiniz bir Azure::ServiceBus::Queue ek seçeneklere nesne, Canlı ya da en büyük sıra boyutu ileti süresi gibi varsayılan kuyruk ayarlarını geçersiz kılmanıza olanak sağlar.You can also pass a Azure::ServiceBus::Queue object with additional options, which enables you to override the 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 saat 1 dakika için dinamik olarak ayarlamak gösterilmektedir:The following example shows how to set the maximum queue size to 5 GB and time to live to 1 minute:

queue = Azure::ServiceBus::Queue.new("test-queue")
queue.max_size_in_megabytes = 5120
queue.default_message_time_to_live = "PT1M"

queue = azure_service_bus_service.create_queue(queue)

Bir kuyruğa ileti göndermek nasılHow to send messages to a queue

Uygulama çağrılarınızı, bir Service Bus kuyruğuna bir ileti göndermek için send_queue_message() metodunda Azure::ServiceBusService nesne.To send a message to a Service Bus queue, your application calls the send_queue_message() method on the Azure::ServiceBusService object. Gönderilen (ve öğesinden alınan) hizmet sıraları Bus iletileri Azure::ServiceBus::BrokeredMessage nesneleri ve yüklü bir standart özellikler kümesi (gibi label ve time_to_live), özel tutmak için kullanılan bir sözlüğü uygulamaya özgü özellikler ve rastgele uygulama verileri gövdesi.Messages sent to (and received from) Service Bus queues are Azure::ServiceBus::BrokeredMessage objects, and have a set of standard properties (such as label and time_to_live), a dictionary that is used to hold custom application-specific properties, and a body of arbitrary application data. Bir uygulama iletisi olarak bir dize değeri geçirerek ileti gövdesini ayarlayabilirsiniz ve gerekli tüm standart özellikleri varsayılan değerlerle doldurulur.An application can set the body of the message by passing a string value as the message and 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 test-queue kullanarak send_queue_message():The following example demonstrates how to send a test message to the queue named test-queue using send_queue_message():

message = Azure::ServiceBus::BrokeredMessage.new("test queue message")
message.correlation_id = "test-correlation-id"
azure_service_bus_service.send_queue_message("test-queue", message)

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 ilişkin bir sınır yoktur ancak kuyruk tarafından tutulan iletilerin toplam boyutu için uç sınır vardır.There is no limit on the number of messages held in a queue but there is 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.

Kuyruktan ileti almaHow to receive messages from a queue

İletilerin kullanarak bir sıraya alındığı receive_queue_message() metodunda Azure::ServiceBusService nesne.Messages are received from a queue using the receive_queue_message() method on the Azure::ServiceBusService object. Varsayılan olarak, iletileri okuyun ve sıradan silinir olmadan kilitli.By default, messages are read and locked without being deleted from the queue. Ayarlayarak okunurlar ancak, iletileri kuyruktan silebilirsiniz :peek_lock seçeneğini false.However, you can delete messages from the queue as they are read by setting the :peek_lock option to false.

Varsayılan davranışı, okuma ve silme ayrıca, atlanan iletilere uygulamaları desteklemek mümkün kılar bir iki aşamalı işlemi yapar.The default behavior makes the reading and deleting a two-stage operation, which also makes it possible to support applications that cannot 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 delete_queue_message() 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 delete_queue_message() method and providing the message to be deleted as a parameter. delete_queue_message() Yöntemi iletiyi kullanılıyor olarak işaretler ve kuyruktan kaldırın.The delete_queue_message() method will mark the message as being consumed and remove it from the queue.

Varsa :peek_lock parametrenin ayarlanmış false, okuma ve ileti silme basit model haline gelir ve içinde bir uygulama tolere edebilen bir arıza olması durumunda bir iletiyi işlememeye izin senaryolarda en iyi şekilde çalışır.If the :peek_lock parameter is set to false, reading, and deleting the message becomes the simplest model, and works best for scenarios in which an application can tolerate not processing a message in the event of a failure. Bu durumu daha iyi anlamak için müşterinin bir alma isteği bildirdiğini ve bu isteğin işlenmeden çöktüğünü varsayın.To understand this, consider a scenario in which the consumer issues the receive request and then crashes before processing it. Service Bus iletisi, uygulama yeniden başlatılıp iletileri tekrar kullanmaya başladığında, Tüketilmekte olan olarak işaretlediğinden çökmenin öncesinde kullanılan iletiyi atlamış olur.Because Service Bus has marked the message as being consumed, when the application restarts and begins consuming messages again, it will have missed the message that was consumed prior to the crash.

Aşağıdaki örneği kullanarak iletileri almak ve işlemek nasıl gösterir receive_queue_message().The following example demonstrates how to receive and process messages using receive_queue_message(). Örneğin ilk alır ve bir iletiyi kullanarak siler :peek_lock kümesine false, başka bir iletiyi alır ve ardından iletiyi kullanarak siler delete_queue_message():The example first receives and deletes a message by using :peek_lock set to false, then it receives another message and then deletes the message using delete_queue_message():

message = azure_service_bus_service.receive_queue_message("test-queue",
  { :peek_lock => false })
message = azure_service_bus_service.receive_queue_message("test-queue")
azure_service_bus_service.delete_queue_message(message)

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 unlock_queue_message() metodunda Azure::ServiceBusService nesne.If a receiver application is unable to process the message for some reason, then it can call the unlock_queue_message() method on the Azure::ServiceBusService object. Bu çağrı Bus hizmetinin 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.This call causes 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 önce iletiyi işleyemezse (örneğin, uygulama çökerse) Service Bus otomatik olarak iletinin kilidini açar ve alınabilmesini kilit zaman aşımı dolmadan tekrar kullanılabilir.There is 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 unlocks the message automatically and makes it available to be received again.

Uygulama iletiyi ancak önce çökmesi durumunda, delete_queue_message() yöntemi çağrılır, ardından yeniden başlatıldığında ileti uygulamaya yeniden teslim.In the event that the application crashes after processing the message but before the delete_queue_message() method is called, then the message is redelivered to the application when it restarts. Bu işlem genellikle çağrılırken 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 process is often called At Least Once Processing; that is, each message is processed at least once but in certain situations the same message may be redelivered. Senaryo yinelenen işlemeyi kabul etmiyorsa yinelenen ileti teslimine izin vermek için uygulama geliştiricilerin uygulamaya ilave bir mantık eklemesi gerekir.If the scenario cannot tolerate duplicate processing, then application developers should add additional logic to their application to handle duplicate message delivery. Bu genellikle kullanılmasıdır message_id özelliğini iletinin teslim denemeleri arasında sabit kalır.This is often achieved using the message_id property of the message, which remains 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

Artık Service Bus kuyruklarına ilişkin temel bilgileri öğrendiğinize göre, daha fazla bilgi edinmek için aşağıdaki bağlantıları izleyin.Now that you've learned the basics of Service Bus queues, follow these links to learn more.

Bu makalede ele alınan Azure Service Bus kuyrukları ve Azure kuyrukları ele arasında bir karşılaştırma için ruby'den kuyruk depolama kullanma makale için bkz: Azure kuyrukları ve Azure hizmet veri yolu kuyrukları - karşılaştırıldığında ve KarşıtlıklarFor a comparison between the Azure Service Bus queues discussed in this article and Azure Queues discussed in the How to use Queue storage from Ruby article, see Azure Queues and Azure Service Bus Queues - Compared and Contrasted