Skip to main content

Service Bus Topics - Overview

This is the first post of a series of blog posts about Service Bus Topics. In this post we will see what Service Bus Topics is and what we can do with it.
Don’t let the name Topic intimidated you. This service, exposed by Windows Azure can be seen as a Service Bus Queues with steroids. The main feature of Service Bus Topics is the ability to publish a message to more than one subscriber (consumers). Each message sent to the Service Bus Topics goes a specific topic. Each topic is able to forward the message to each subscriber. We can imagine each subscriber has a private queue where the topic sends the message. All the messages sent to the topic will be received by each subscriber in the same order that were added to the topic.
The model of communication that is supported by Service Bus Topics is named publish/subscribe communication. This type of communication permits to have a communication from one-to-many. A message added to the topic will be received by all the subscribers.
One of the big advantages of using Service Bus Topics is scalability. Theoretically, we can have an unlimited numbers of subscribers to a topic. Each subscriber can be register/unregistered dynamically. Because of this it is very easy to reconfigure it.
One of the great functionalities of Service Bus Topics is the messaging filter. Each subscriber that is added to the topic can specify his own filters. Based on this filter we will receive the messages that validate his filter condition. Based on this, we can define “routing” schema for topics and subscribers. The filter expression is in SQL92 format – this SQL format is known by all of us and is very easy to use. But we will talk about this in another post.
Service Bus Topics are very similar with Service Bus Queues; I would say that topics are constructed over the queue. Because of this a lot of functionalities and features from the queue can be found to the topics also. For example the integration with WCF of the 4 properties of the Service Bus Topics that is valid also for Service Bus Topics:
  • Loose Coupling – we can add, remove subscribers without affecting the rest of the system
  • Load leveling – the topics can work in good conditions with load peaks and indirectly this peaks will be smoothed. The subscriber will not fell this peak.
  • Temporal decoupling – the producer of messages don’t need to know about the subscribers. In the same time subscribers don’t need to be online all the time.
  • Load balancing – a message can be consumer by more than one subscriber. The process of redirecting the message to each subscriber is resolved by Service Bus Topics.
In today post we saw what Service Bus Topics is. In the next post we will see how we can use it.


Popular posts from this blog

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …

GET call of REST API that contains '/'-slash character in the value of a parameter

Let’s assume that we have the following scenario: I have a public HTTP endpoint and I need to post some content using GET command. One of the parameters contains special characters like “\” and “/”. If the endpoint is an ApiController than you may have problems if you encode the parameter using the http encoder.
using (var httpClient = new HttpClient()) { httpClient.BaseAddress = baseUrl; Task<HttpResponseMessage> response = httpClient.GetAsync(string.Format("api/foo/{0}", "qwert/qwerqwer"))); response.Wait(); response.Result.EnsureSuccessStatusCode(); } One possible solution would be to encode the query parameter using UrlTokenEncode method of HttpServerUtility class and GetBytes method ofUTF8. In this way you would get the array of bytes of the parameter and encode them as a url token.
The following code show to you how you could write the encode and decode methods.

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions.
Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood.
using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope.
In the followi…