{"id":6739,"date":"2011-05-25T00:00:00","date_gmt":"2011-05-25T00:00:00","guid":{"rendered":"https:\/\/azure.microsoft.com\/blog\/an-introduction-to-service-bus-topics"},"modified":"2025-09-10T13:15:12","modified_gmt":"2025-09-10T20:15:12","slug":"an-introduction-to-service-bus-topics","status":"publish","type":"post","link":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/","title":{"rendered":"An Introduction to Service Bus Topics"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">[This article was contributed by the AppFabric team.]<\/p>\n\n\n\n<p class=\"Publishwithline wp-block-paragraph\">In the May CTP of Service Bus, we\u2019ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable message queuing and durable publish\/subscribe messaging. Last week I posted the <a href=\"https:\/\/blogs.msdn.com\/b\/appfabric\/archive\/2011\/05\/17\/an-introduction-to-service-bus-queues.aspx\">Introduction to Service Bus Queues<\/a> blog entry. This post follows on from that and provides an introduction to the publish\/subscribe capabilities offered by Service Bus Topics. Again, I\u2019m not going to cover all the features in this article, I just want to give you enough information to get started with the new feature. We\u2019ll have follow-up posts that drill into some of the details.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\"><br>I\u2019m going to continue with the retail scenario that I started in the <a href=\"https:\/\/blogs.msdn.com\/b\/appfabric\/archive\/2011\/05\/17\/an-introduction-to-service-bus-queues.aspx\">queues blog post<\/a>. Recall that sales data from individual Point of Sale (POS) terminals needs to be routed to an inventory management system which uses that data to determine when stock needs to be replenished. Each POS terminal reports its sales data by sending messages to the DataCollectionQueue where they sit until they are received by the inventory management system as shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp\" alt=\"diagram showing how points of sales terminals make their way through Data-collection-queue to the inventory management system\" \/><\/figure>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Now let\u2019s evolve this scenario. A new requirement has been added to the system: the store owner wants to be able to monitor how the store is performing in real-time.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">To address this requirement we need to take a \u201ctap\u201d off the sales data stream. We still want each message sent by the POS terminals to be sent to the Inventory Management System as before but we want another copy of each message that we can use to present the dashboard view to the store owner.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">In any situation like this, where you need each message to be consumed by multiple parties, you need the Service Bus Topic feature. Topics provide the publish\/subscribe pattern in which each published message is made available to each subscription registered with the Topic. Contrast this with the queue where each message is consumed by a single consumer. That\u2019s the key difference between the two models.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Messages are sent to a topic in exactly the same way as they are sent to a queue but messages aren\u2019t received from the topic directly, instead they are received from subscriptions. You can think of a topic subscription like a virtual queue that gets copies of the messages that are sent to the topic. Messages are received from a subscription in exactly the same way as they are received from a queue.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">So, going back to the scenario, the first thing to do is to switch out the queue for a topic and add a subscription that will be used by the Inventory Management System. So, the system would now look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/8546.t2.webp\" alt=\"diagram showing how points of sales terminals make their way through Data-collection-topic to the inventory management system\" \/><\/figure>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">The above configuration would perform identically to the previous queue-based design. That is, messages sent to the topic would be routed to the Inventory subscription from where the Inventory Management System would consume them.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Now, in order to support the management dashboard, we need to create a second subscription on the topic as shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/6758.t3.webp\" alt=\"another diagram showing how points of sales terminals make their way through Data-collection-queue to the inventory management system\" \/><\/figure>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Now, with the above configuration, each message from the POS terminals will be made available to both the Dashboard and Inventory subscriptions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading WordSection1\" id=\"show-me-the-code\">Show Me the Code<\/h2>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">I described how to sign-up for a Service Bus account and create a namespace in the <a href=\"https:\/\/blogs.msdn.com\/b\/appfabric\/archive\/2011\/05\/17\/an-introduction-to-service-bus-queues.aspx\">queues blog post<\/a> so I won\u2019t cover that again here. Recall that to use the Service Bus namespace, an application needs to reference the AppFabric Service Bus DLLs, namely Microsoft.ServiceBus.dll and Microsoft.ServiceBus.Messaging.dll. You can find these as part of the SDK download.<\/p>\n\n\n\n<h3 class=\"wp-block-heading WordSection1\" id=\"creating-the-topic-and-subscriptions\">Creating the Topic and Subscriptions<\/h3>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">Management operations for Service Bus messaging entities (queues and topics) are performed via the ServiceBusNamespaceClient which is constructed with the base address of the Service Bus namespace and the user credentials. The ServiceBusNamespaceClient provides methods to create, enumerate and delete messaging entities. The snippet below shows how the ServiceBusNamespaceClient is used to create the DataCollectionTopic.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">&nbsp;&nbsp;&nbsp; Uri ServiceBusEnvironment.CreateServiceUri(&#8220;sb&#8221;, &#8220;ingham-blog&#8221;, string.Empty);<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; string name = &#8220;owner&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; string key = &#8220;abcdefghijklmopqrstuvwxyz&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; ServiceBusNamespaceClient namespaceClient = new ServiceBusNamespaceClient(<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baseAddress, TransportClientCredentialBase.CreateSharedSecretCredential(name, key) );<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n Topic dataCollectionTopic = namespaceClient.CreateTopic(\"DataCollectionTopic\");\n<\/pre><\/div>\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Note that there are overloads of the CreateTopic method that allow properties of the topic to be tuned, for example, to set the default time-to-live to be applied to messages sent to the topic. Next, let\u2019s add the Inventory and Dashboard subscriptions.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n    dataCollectionTopic.AddSubscription(\"Inventory\");\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n    dataCollectionTopic.AddSubscription(\"Dashboard\");\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading WordSection1\" id=\"sending-messages-to-the-topic\">Sending Messages to the Topic<\/h3>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">As I mentioned earlier, applications send messages to a topic in the same way that they send to a queue so the code below will look very familiar if you read the <a href=\"https:\/\/blogs.msdn.com\/b\/appfabric\/archive\/2011\/05\/17\/an-introduction-to-service-bus-queues.aspx\">queues blog post<\/a>. The difference is the application creates a TopicClient instead of a QueueClient.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">For runtime operations on Service Bus entities, i.e., sending and receiving messages, an application first needs to create a MessagingFactory. The base address of the ServiceBus namespace and the user credentials are required.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">&nbsp;&nbsp;&nbsp; Uri ServiceBusEnvironment.CreateServiceUri(&#8220;sb&#8221;, &#8220;ingham-blog&#8221;, string.Empty);<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; string name = &#8220;owner&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; string key = &#8220;abcdefghijklmopqrstuvwxyz&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; MessagingFactory factory = MessagingFactory.Create(<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; baseAddress, TransportClientCredentialBase.CreateSharedSecretCredential(name, key) );<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">From the factory, a TopicClient is created for the particular topic of interest, in our case, the DataCollectionTopic.<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; TopicClient topicClient = factory.CreateTopicClient(&#8220;DataCollectionTopic&#8221;);<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">A MessageSender is created from the TopicClient to perform the send operations.<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; MessageSender ms = topicClient.CreateSender();<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">Messages sent to, and received from, Service Bus topics (and queues) are instances of the BrokeredMessage class which consists of a set of standard properties (such as Label and TimeToLive), a dictionary that is used to hold application properties, and a body of arbitrary application data. An application can set the body by passing in any serializable object into CreateMessage (the example below passes in a SalesData object representing the sales data from the POS terminal) which will use the DataContractSerializer to serialize the object. Alternatively, a System.IO.Stream can be provided.<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; BrokeredMessage bm = BrokeredMessage.CreateMessage(salesData);<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; bm.Label = &#8220;SalesReport&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; bm.Properties[&#8220;StoreName&#8221;] = &#8220;Redmond&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; bm.Properties[&#8220;MachineID&#8221;] = &#8220;POS_1&#8221;;<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; ms.Send(bm);<\/p>\n\n\n\n<h3 class=\"wp-block-heading WordSection1\" id=\"receiving-messages-from-a-subscription\">Receiving Messages from a Subscription<\/h3>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Just like when using queues, messages are received from a subscription using a MessageReceiver. The difference is that the MessageReceiver is created from a SubscriptionClient rather than a QueueClient. Everything else remains the same including support for the two different receive modes (ReceiveAndDelete and PeekLock) that I discussed in the <a href=\"https:\/\/blogs.msdn.com\/b\/appfabric\/archive\/2011\/05\/17\/an-introduction-to-service-bus-queues.aspx\">queues blog post<\/a>.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">So, first we create the SubscriptionClient, passing the name of the topic and the name of the subscription as parameters. Here I\u2019m using the Inventory subscription.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n    SubscriptionClient subClient = factory.CreateSubscriptionClient(\"DataCollectionTopic\", \"Inventory\");\n<\/pre><\/div>\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Next we create the MessageReceiver and receive a message.<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; MessageReceiver mr = subClient.CreateReceiver();<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; BrokeredMessage receivedMessage = mr.Receive();<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; try<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProcessMessage(receivedMessage);<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; receivedMessage.Complete();<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; catch (Exception e)<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; {<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; receivedMessage.Abandon();<\/p>\n\n\n\n<p class=\"WordSection1 wp-block-paragraph\">&nbsp;&nbsp;&nbsp; }<\/p>\n\n\n\n<h2 class=\"wp-block-heading WordSection1\" id=\"subscription-filters\">Subscription Filters<\/h2>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">So far, I\u2019ve said that all messages sent to the topic are made available to all registered subscriptions. The key phrase there is \u201cmade available\u201d. While Service Bus subscriptions see all messages sent to the topic, it is possible to only copy a subset of those messages to the virtual subscription queue. This is done using subscription filters. When a subscription is created, it\u2019s possible to supply a filter expression in the form of a SQL92 style predicate that can operate over the properties of the message, both the system properties (e.g., Label) and the application properties, such as StoreName in the above example.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Let\u2019s evolve the scenario a little to illustrate this. A second store is to be added to our retail scenario. Sales data from all of the POS terminals from both stores still need to be routed to the centralized Inventory Management System but a store manager using the Dashboard tool is only interested in the performance of her store. We can use subscription filtering to achieve this. Note that when the POS terminals publish messages, they set the StoreName application property on the message. Now we have two stores, let\u2019s say Redmond and Seattle, the POS terminals in the Redmond store stamp their sales data messages with a StoreName of Redmond while the Seattle store POS terminals use a StoreName of Seattle. The store manager of the Redmond store only wishes to see data from its POS terminals. Here\u2019s how the system would look:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/4628.t4.webp\" alt=\"diagram showing how various points of sales terminals make their way through Data-collection-queue to the inventory management system\" \/><\/figure>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">To set this routing up, we need to make a simple change to how we\u2019re creating the Dashboard subscription as follows:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n    dataCollectionTopic.AddSubscription(\"Dashboard\", new SqlFilterExpression(\"StoreName = 'Redmond'\");\n<\/pre><\/div>\n\n\n<p class=\"MsoNormal wp-block-paragraph\">With this subscription filter in place, only messages with the StoreName property set to Redmond will be copied to the virtual queue for the Dashboard subscription.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">There is a bigger story to tell around subscription filtering. Applications have an option to have multiple filter rules per subscription and there\u2019s also the ability to modify the properties of a message as it passes in to a subscription\u2019s virtual queue. We\u2019ll cover these advanced topics in a separate blog post.<\/p>\n\n\n\n<h2 class=\"wp-block-heading WordSection1\" id=\"wrapping-up\">Wrapping up<\/h2>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Hopefully this post has shown you how to get started with the topic-based publish\/subscribe feature being introduced in the new May CTP of Service Bus.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">It\u2019s worth noting that all of the reasons for using queuing that I mentioned in the introduction to <a href=\"https:\/\/blogs.msdn.com\/b\/appfabric\/archive\/2011\/05\/17\/an-introduction-to-service-bus-queues.aspx\">queuing blog post<\/a> also apply to topics, namely:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\"><div class=\"MsoNormal\">Temporal decoupling \u2013 message producers and consumers do not have to be online at the same time.<\/div><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><div class=\"MsoNormal\">Load leveling \u2013 peaks in load are smoothed out by the topic allowing consuming applications to be provisioned for average load rather than peak load.<\/div><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><div class=\"MsoNormal\">Load balancing \u2013 just like with a queue, it\u2019s possible to have multiple competing consumers listening on a single subscription with each message being handed off to only one of the consumers, thereby balancing load.<\/div><\/li>\n\n\n\n<li class=\"wp-block-list-item\"><div class=\"MsoNormal\">Loose coupling \u2013 it\u2019s possible to evolve the messaging network without impacting existing endpoints, e.g., adding subscriptions or changing filters to a topic to accommodate new consumers.<\/div><\/li>\n<\/ul>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">We\u2019ve only really just scratched the surface here; we\u2019ll go in to more depth in future posts.<\/p>\n\n\n\n<p class=\"MsoNormal wp-block-paragraph\">Finally, remember one of the main goals of our CTP release is to get feedback on the service. We\u2019re interested to hear what you think of the Service Bus messaging features. We\u2019re particularly keen to get your opinion of the API. So, if you have suggestions, critique, praise, or questions, please let us know at <a href=\"https:\/\/social.msdn.microsoft.com\/Forums\/en-US\/appfabricctp\/\">https:\/\/social.msdn.microsoft.com\/Forums\/en-US\/appfabricctp\/<\/a>. Your feedback will help us improve the service for you and other users like you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[This article was contributed by the AppFabric team.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","footnotes":"","msx_community_cta_settings":[]},"categories":[1498],"tags":[],"audience":[],"content-type":[],"product":[1586],"tech-community":[],"topic":[],"coauthors":[97],"class_list":["post-6739","post","type-post","status-publish","format-standard","hentry","category-integration","product-service-bus","review-flag-1680286580-543","review-flag-1680286581-295","review-flag-new-1680286579-546"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>An Introduction to Service Bus Topics | Microsoft Azure Blog<\/title>\n<meta name=\"description\" content=\"In the May CTP of Service Bus, we&rsquo;ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable\u2026\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An Introduction to Service Bus Topics | Microsoft Azure Blog\" \/>\n<meta property=\"og:description\" content=\"In the May CTP of Service Bus, we&rsquo;ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable\u2026\" \/>\n<meta property=\"og:url\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Azure Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/microsoftazure\" \/>\n<meta property=\"article:published_time\" content=\"2011-05-25T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-10T20:15:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp\" \/>\n<meta name=\"author\" content=\"Microsoft Azure\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@azure\" \/>\n<meta name=\"twitter:site\" content=\"@azure\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Azure\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\"},\"author\":[{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/microsoft-azure\/\",\"@type\":\"Person\",\"@name\":\"Microsoft Azure\"}],\"headline\":\"An Introduction to Service Bus Topics\",\"datePublished\":\"2011-05-25T00:00:00+00:00\",\"dateModified\":\"2025-09-10T20:15:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\"},\"wordCount\":1819,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp\",\"articleSection\":[\"Integration\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\",\"name\":\"An Introduction to Service Bus Topics | Microsoft Azure Blog\",\"isPartOf\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp\",\"datePublished\":\"2011-05-25T00:00:00+00:00\",\"dateModified\":\"2025-09-10T20:15:12+00:00\",\"description\":\"In the May CTP of Service Bus, we&rsquo;ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable\u2026\",\"breadcrumb\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog home\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integration\",\"item\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/integration\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An Introduction to Service Bus Topics\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#website\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"name\":\"Microsoft Azure Blog\",\"description\":\"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.\",\"publisher\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization\",\"name\":\"Microsoft Azure Blog\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"contentUrl\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp\",\"width\":512,\"height\":512,\"caption\":\"Microsoft Azure Blog\"},\"image\":{\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/microsoftazure\",\"https:\/\/x.com\/azure\",\"https:\/\/www.instagram.com\/microsoftdeveloper\/\",\"https:\/\/www.linkedin.com\/company\/16188386\",\"https:\/\/www.youtube.com\/user\/windowsazure\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/c702e5edd662b328b49b7e1180cab117\",\"name\":\"shakir\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g\",\"caption\":\"shakir\"},\"sameAs\":[\"https:\/\/azure.microsoft.com\"],\"url\":\"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An Introduction to Service Bus Topics | Microsoft Azure Blog","description":"In the May CTP of Service Bus, we&rsquo;ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable\u2026","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/","og_locale":"en_US","og_type":"article","og_title":"An Introduction to Service Bus Topics | Microsoft Azure Blog","og_description":"In the May CTP of Service Bus, we&rsquo;ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable\u2026","og_url":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/","og_site_name":"Microsoft Azure Blog","article_publisher":"https:\/\/www.facebook.com\/microsoftazure","article_published_time":"2011-05-25T00:00:00+00:00","article_modified_time":"2025-09-10T20:15:12+00:00","og_image":[{"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp","type":"","width":"","height":""}],"author":"Microsoft Azure","twitter_card":"summary_large_image","twitter_creator":"@azure","twitter_site":"@azure","twitter_misc":{"Written by":"Microsoft Azure","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#article","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/"},"author":[{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/microsoft-azure\/","@type":"Person","@name":"Microsoft Azure"}],"headline":"An Introduction to Service Bus Topics","datePublished":"2011-05-25T00:00:00+00:00","dateModified":"2025-09-10T20:15:12+00:00","mainEntityOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/"},"wordCount":1819,"commentCount":0,"publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp","articleSection":["Integration"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/","name":"An Introduction to Service Bus Topics | Microsoft Azure Blog","isPartOf":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage"},"thumbnailUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp","datePublished":"2011-05-25T00:00:00+00:00","dateModified":"2025-09-10T20:15:12+00:00","description":"In the May CTP of Service Bus, we&rsquo;ve added a brand-new set of cloud-based, message-oriented-middleware technologies including reliable\u2026","breadcrumb":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#primaryimage","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2011\/05\/7853.t1.webp"},{"@type":"BreadcrumbList","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/an-introduction-to-service-bus-topics\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog home","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/"},{"@type":"ListItem","position":2,"name":"Integration","item":"https:\/\/azure.microsoft.com\/en-us\/blog\/category\/integration\/"},{"@type":"ListItem","position":3,"name":"An Introduction to Service Bus Topics"}]},{"@type":"WebSite","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#website","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","name":"Microsoft Azure Blog","description":"Get the latest Azure news, updates, and announcements from the Azure blog. From product updates to hot topics, hear from the Azure experts.","publisher":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/azure.microsoft.com\/en-us\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#organization","name":"Microsoft Azure Blog","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","contentUrl":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-content\/uploads\/2024\/06\/microsoft_logo.webp","width":512,"height":512,"caption":"Microsoft Azure Blog"},"image":{"@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/microsoftazure","https:\/\/x.com\/azure","https:\/\/www.instagram.com\/microsoftdeveloper\/","https:\/\/www.linkedin.com\/company\/16188386","https:\/\/www.youtube.com\/user\/windowsazure"]},{"@type":"Person","@id":"https:\/\/azure.microsoft.com\/en-us\/blog\/#\/schema\/person\/c702e5edd662b328b49b7e1180cab117","name":"shakir","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g7664e653ea371ce16eaf75e9fa8952c4","url":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9342c7c05bb16548741bc5cd3a3e3b7ee0c8e746844ad2cc582db5beb5514c6f?s=96&d=mm&r=g","caption":"shakir"},"sameAs":["https:\/\/azure.microsoft.com"],"url":"https:\/\/azure.microsoft.com\/en-us\/blog\/author\/shakir\/"}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Azure Blog","distributor_original_site_url":"https:\/\/azure.microsoft.com\/en-us\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/6739","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/comments?post=6739"}],"version-history":[{"count":3,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/6739\/revisions"}],"predecessor-version":[{"id":46078,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/posts\/6739\/revisions\/46078"}],"wp:attachment":[{"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/media?parent=6739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/categories?post=6739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tags?post=6739"},{"taxonomy":"audience","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/audience?post=6739"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/content-type?post=6739"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/product?post=6739"},{"taxonomy":"tech-community","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/tech-community?post=6739"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/topic?post=6739"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/azure.microsoft.com\/en-us\/blog\/wp-json\/wp\/v2\/coauthors?post=6739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}