Service Bus konuları ve abonelikleri ile Ruby kullanmaHow to use Service Bus topics and subscriptions with Ruby

Bu makalede, Service Bus konuları ve abonelikleri Ruby uygulamalardan kullanmayı açıklar.This article describes how to use Service Bus topics and subscriptions from Ruby applications. Kapsanan senaryolar şunlardır:The scenarios covered include:

  • Konuları ve abonelikleri oluşturmaCreating topics and subscriptions
  • Abonelik filtreleri oluşturmaCreating subscription filters
  • Bir konu başlığına ileti göndermeSending messages to a topic
  • Abonelikten ileti almaReceiving messages from a subscription
  • Konuları ve abonelikleri silmeDeleting topics and subscriptions

Ö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, Visual Studio veya MSDN abone Avantajlarınızı veya kaydolmak için bir ücretsiz bir hesap.You can activate your Visual Studio or MSDN subscriber benefits or sign-up for a free account.

  2. İzleyeceğiniz adımlar hızlı başlangıç: Bir Service Bus konusu ve konu için Abonelik oluşturmak için Azure portal'ı kullanmanızı bir Service Bus'ı oluşturmak için ad alanı ve bağlantı dizesi.Follow steps in the Quickstart: Use the Azure portal to create a Service Bus topic and subscriptions to the topic to create a Service Bus namespace and get the connection string.

    Not

    Oluşturacağınız bir konu ve abonelik kullanarak konuya Ruby Bu hızlı başlangıçta.You will create a topic and a subscription to the topic by using Ruby in this quickstart.

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".

Konu başlığı oluşturmaCreate a topic

Azure::ServiceBusService nesnesi konuları ile çalışmanıza olanak sağlar.The Azure::ServiceBusService object enables you to work with topics. Aşağıdaki kod oluşturur bir Azure::ServiceBusService nesne.The following code creates an Azure::ServiceBusService object. Bir konu oluşturmak için kullanın create_topic() yöntemi.To create a topic, use the create_topic() method. Aşağıdaki örnek, bir konu oluşturur veya tüm hataları yazdırır.The following example creates a topic or prints out any errors.

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

De geçirebilirsiniz bir Azure::ServiceBus::Topic nesne, Canlı ya da en büyük sıra boyutu ileti süresi gibi varsayılan konu ayarlarını geçersiz kılmanıza olanak sağlayan ek seçeneklere sahip.You can also pass an Azure::ServiceBus::Topic object with additional options, which enable you to override default topic 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 canlı olarak ayarlanması gösterir:The following example shows setting the maximum queue size to 5 GB and time to live to 1 minute:

topic = Azure::ServiceBus::Topic.new("test-topic")
topic.max_size_in_megabytes = 5120
topic.default_message_time_to_live = "PT1M"

topic = azure_service_bus_service.create_topic(topic)

Abonelik oluşturmaCreate subscriptions

Konu abonelikleri ile de oluşturulur Azure::ServiceBusService nesne.Topic subscriptions are also created with the Azure::ServiceBusService object. Abonelikler adlandırılır ve aboneliğin sanal kuyruğuna teslim ileti kümesini sınırlayan isteğe bağlı bir filtre içerebilir.Subscriptions are named and can have an optional filter that restricts the set of messages delivered to the subscription's virtual queue.

Varsayılan olarak, abonelikleri kalıcıdır.By default, subscriptions are persistent. Ya da bunlar kadar var olmaya devam etmek için veya ilişkili konu ile silindi.They continue to exist until either they, or the topic they are associated with, are deleted. Uygulamanız mantıksal bir abonelik oluşturmak için içeriyorsa, ilk getSubscription yöntemi kullanarak abonelik zaten var olup denetlemelisiniz.If your application contains logic to create a subscription, it should first check if the subscription already exists by using the getSubscription method.

Otomatik olarak ayarlayarak silinmiş abonelikleri olabilir AutoDeleteOnIdle özelliği.You can have the subscriptions automatically deleted by setting the AutoDeleteOnIdle property.

Varsayılan (MatchAll) filtreyle abonelik oluşturmaCreate a subscription with the default (MatchAll) filter

Yeni bir abonelik oluşturulurken filtre belirtilmezse MatchAll filtre (varsayılan) kullanılır.If no filter is specified when a new subscription is created, the MatchAll filter (default) is used. Zaman MatchAll filtresinin kullanılacağının, konu başlığında yayımlanan tüm iletiler aboneliğin sanal kuyruğuna yerleştirilir.When the MatchAll filter is used, all messages published to the topic are placed in the subscription's virtual queue. Aşağıdaki örnek "tüm iletileri" adlı bir abonelik oluşturulur ve varsayılan MatchAll filtre.The following example creates a subscription named "all-messages" and uses the default MatchAll filter.

subscription = azure_service_bus_service.create_subscription("test-topic", "all-messages")

Filtre içeren abonelik oluşturmaCreate subscriptions with filters

Hangi belirtmenize olanak sağlayan filtreler de tanımlayabilirsiniz konu başlığına gönderilen iletilerin görünmesini içinde belirli bir abonelik.You can also define filters that enable you to specify which messages sent to a topic should show up within a specific subscription.

En esnek filtre türü, abonelikler tarafından desteklenen Azure::ServiceBus::SqlFilter, SQL92 kümesini uygular.The most flexible type of filter supported by subscriptions is the Azure::ServiceBus::SqlFilter, which implements a subset of SQL92. SQL filtreleri, konu başlığında yayımlanan iletilerin özelliklerinde çalışır.SQL filters operate on the properties of the messages that are published to the topic. SQL Filtresi ile kullanılabilen ifadeler hakkında daha fazla ayrıntı için gözden SqlFilter söz dizimi.For more details about the expressions that can be used with a SQL filter, review the SqlFilter syntax.

Filtreleri kullanarak için bir abonelik ekleyebilmeniz için create_rule() yöntemi Azure::ServiceBusService nesne.You can add filters to a subscription by using the create_rule() method of the Azure::ServiceBusService object. Bu yöntem, mevcut bir aboneliğe yeni filtreler eklemenize olanak sağlar.This method enables you to add new filters to an existing subscription.

Varsayılan filtre tüm yeni abonelikler için otomatik olarak uygulanan olduğundan, öncelikle varsayılan filtreyi kaldırmanız gerekir veya MatchAll , belirttiğiniz diğer filtreleri geçersiz kılar.Since the default filter is applied automatically to all new subscriptions, you must first remove the default filter, or the MatchAll overrides any other filters you may specify. Varsayılan kural kullanarak kaldırabilirsiniz delete_rule() metodunda Azure::ServiceBusService nesne.You can remove the default rule by using the delete_rule() method on the Azure::ServiceBusService object.

Aşağıdaki örnek "iletileri yüksek" adlı bir abonelik oluşturur bir Azure::ServiceBus::SqlFilter , yalnızca özel bir bulunduran iletileri seçen message_number özelliği 3'ten büyük:The following example creates a subscription named "high-messages" with an Azure::ServiceBus::SqlFilter that only selects messages that have a custom message_number property greater than 3:

subscription = azure_service_bus_service.create_subscription("test-topic", "high-messages")
azure_service_bus_service.delete_rule("test-topic", "high-messages", "$Default")

rule = Azure::ServiceBus::Rule.new("high-messages-rule")
rule.topic = "test-topic"
rule.subscription = "high-messages"
rule.filter = Azure::ServiceBus::SqlFilter.new({
  :sql_expression => "message_number > 3" })
rule = azure_service_bus_service.create_rule(rule)

Benzer şekilde, aşağıdaki örnekte adlı bir abonelik oluşturur low-messages ile bir Azure::ServiceBus::SqlFilter , yalnızca bulunduran iletileri seçen bir message_number özelliğini daha az veya eşit 3:Similarly, the following example creates a subscription named low-messages with an Azure::ServiceBus::SqlFilter that only selects messages that have a message_number property less than or equal to 3:

subscription = azure_service_bus_service.create_subscription("test-topic", "low-messages")
azure_service_bus_service.delete_rule("test-topic", "low-messages", "$Default")

rule = Azure::ServiceBus::Rule.new("low-messages-rule")
rule.topic = "test-topic"
rule.subscription = "low-messages"
rule.filter = Azure::ServiceBus::SqlFilter.new({
  :sql_expression => "message_number <= 3" })
rule = azure_service_bus_service.create_rule(rule)

Ne zaman bir ileti hemen gönderilir test-topic, bu her zaman olması girmediklerinden abone alıcılar için all-messages konu aboneliği ve seçmeli olarak teslim edilen alıcılar abone için high-messages ve low-messages (bağlı olarak konu abonelikleri ileti içeriği).When a message is now sent to test-topic, it is always be delivered to receivers subscribed to the all-messages topic subscription, and selectively delivered to receivers subscribed to the high-messages and low-messages topic subscriptions (depending upon the message content).

Konu başlığına ileti göndermeSend messages to a topic

Bir Service Bus konusuna bir ileti göndermek için uygulamanızı kullanmalısınız send_topic_message() metodunda Azure::ServiceBusService nesne.To send a message to a Service Bus topic, your application must use the send_topic_message() method on the Azure::ServiceBusService object. Service Bus konu başlıklarına gönderilen iletiler örnekleridir Azure::ServiceBus::BrokeredMessage nesneleri.Messages sent to Service Bus topics are instances of the Azure::ServiceBus::BrokeredMessage objects. Azure::ServiceBus::BrokeredMessage nesneleri olan bir standart özellikler kümesi (gibi label ve time_to_live), bir uygulamaya özgü özel özellikleri tutmak için kullanılan sözlüğü ve dize verileri gövdesi içerir.Azure::ServiceBus::BrokeredMessage objects 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 string data. Bir uygulama iletisinin gövdesini dize değeri geçirerek ayarlayabilirsiniz send_topic_message() yöntemi ve tüm gerekli standart özellikleri varsayılan değerlerle doldurulur.An application can set the body of the message by passing a string value to the send_topic_message() method and any required standard properties are populated by default values.

Aşağıdaki örnek nasıl beş test iletisi göndereceğinizi gösterir test-topic.The following example demonstrates how to send five test messages to test-topic. message_number Her ileti özel özellik değerini değişen döngü yinelemeyi (hangi abonelik aldığı belirler):The message_number custom property value of each message varies on the iteration of the loop (it determines which subscription receives it):

5.times do |i|
  message = Azure::ServiceBus::BrokeredMessage.new("test message " + i,
    { :message_number => i })
  azure_service_bus_service.send_topic_message("test-topic", message)
end

Service Bus konu başlıkları, Standart katmanda maksimum 256 KB ve Premium katmanda maksimum 1 MB ileti boyutunu destekler.Service Bus topics 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. Konu başlığında tutulan ileti sayısına ilişkin bir sınır yoktur ancak konu başlığı 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 topic but there is a cap on the total size of the messages held by a topic. Bu konu başlığı boyutu, üst sınır 5 GB olacak şekilde oluşturulma zamanında belirlenir.This topic size is defined at creation time, with an upper limit of 5 GB.

Abonelikten ileti almaReceive messages from a subscription

Kullanarak bir abonelik iletilerin alındığı receive_subscription_message() metodunda Azure::ServiceBusService nesne.Messages are received from a subscription using the receive_subscription_message() method on the Azure::ServiceBusService object. Varsayılan olarak, iletiler read(peak) ve abonelikten silmeden kilitli.By default, messages are read(peak) and locked without deleting it from the subscription. Okuma ve ayarlayarak abonelikten ileti silme peek_lock seçeneğini false.You can read and delete the message from the subscription 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_subscription_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_subscription_message() method and providing the message to be deleted as a parameter. delete_subscription_message() Yöntemi iletiyi kullanılıyor olarak işaretler ve abonelikten kaldırır.The delete_subscription_message() method marks the message as being consumed and remove it from the subscription.

Varsa :peek_lock parametrenin ayarlanmış false, okuma ve ileti silme basit model haline gelir ve içinde bir uygulama tolere edebilen bir hata oluştuğunda bir iletinin işlenmemesine 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 when a failure occurs. Hangi tüketici alma isteği bildirdiğini ve ardından işlenmeden önce kilitleniyor bir senaryo düşünün.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şaretlediğinden, uygulama yeniden başlatılıp iletileri tekrar kullanmaya başladığında ardından onu çökmenin öncesinde kullanılan iletiyi eksik.Because Service Bus has marked the message as being consumed, then when the application restarts and begins consuming messages again, it has missed the message that was consumed prior to the crash.

Aşağıdaki örnek nasıl ileti alındı ve işlenen kullanarak gösterir receive_subscription_message().The following example demonstrates how messages can be received and processed using receive_subscription_message(). Örneğin ilk alır ve bir ileti siler low-messages kullanarak abonelik :peek_lock kümesine false, başka bir ileti aldıktan sonra high-messages ve ardından iletiyi kullanaraksilerdelete_subscription_message():The example first receives and deletes a message from the low-messages subscription by using :peek_lock set to false, then it receives another message from the high-messages and then deletes the message using delete_subscription_message():

message = azure_service_bus_service.receive_subscription_message(
  "test-topic", "low-messages", { :peek_lock => false })
message = azure_service_bus_service.receive_subscription_message(
  "test-topic", "high-messages")
azure_service_bus_service.delete_subscription_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_subscription_message() metodunda Azure::ServiceBusService nesne.If a receiver application is unable to process the message for some reason, then it can call the unlock_subscription_message() method on the Azure::ServiceBusService object. Service Bus'ın Abonelikteki 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 causes Service Bus to unlock the message within the subscription and make it available to be received again, either by the same consuming application or by another consuming application.

Ayrıca abonelikte kilitlenen iletiye ilişkin bir zaman aşımı yoktur ve uygulamanın iletiyi işleyemezse (örneğin, uygulama çökerse) önce kilit zaman aşımı süresi dolduktan sonra Service Bus ileti otomatik olarak kilidini açar ve tekrar alınabilir hale.There is also a timeout associated with a message locked within the subscription, 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 make it available to be received again.

Uygulama iletiyi ancak önce çökmesi durumunda, delete_subscription_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_subscription_message() method is called, then the message is redelivered to the application when it restarts. Genellikle adlı en az bir kez işlenmesini; diğer bir deyişle, her ileti en az bir kez işlenir ancak belirli durumlarda aynı ileti yeniden teslim edilebilir.It 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 mantık, genellikle kullanılarak gerçekleştirilir message_id özelliğini iletinin teslim denemeleri arasında sabit kalır.This logic is often achieved using the message_id property of the message, which remains constant across delivery attempts.

Konu başlıklarını ve abonelikleri silmeDelete topics and subscriptions

Konuları ve abonelikleri kalıcı sürece AutoDeleteOnIdle özelliği ayarlanır.Topics and subscriptions are persistent unless the AutoDeleteOnIdle property is set. Olabilirler aracılığıyla silindi Azure portalında veya programlama yoluyla.They can be deleted either through the Azure portal or programmatically. Aşağıdaki örnekte adlı konu nasıl silineceği test-topic.The following example demonstrates how to delete the topic named test-topic.

azure_service_bus_service.delete_topic("test-topic")

Bir konu başlığı silindiğinde bu konu başlığıyla kaydedilen tüm abonelikler de silinir.Deleting a topic also deletes any subscriptions that are registered with the topic. Ayrıca, abonelikler bağımsız olarak da silinebilir.Subscriptions can also be deleted independently. Aşağıdaki kodu adlı abonelik nasıl silineceği high-messages gelen test-topic konu:The following code demonstrates how to delete the subscription named high-messages from the test-topic topic:

azure_service_bus_service.delete_subscription("test-topic", "high-messages")

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

Hizmet veri yolu konuları hakkındaki temel bilgileri öğrendiniz, daha fazla bilgi için bu bağlantıları izleyin.Now that you've learned the basics of Service Bus topics, follow these links to learn more.