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 …

How to check in AngularJS if a service was register or not

There are cases when you need to check in a service or a controller was register in AngularJS.
For example a valid use case is when you have the same implementation running on multiple application. In this case, you may want to intercept the HTTP provider and add a custom step there. This step don’t needs to run on all the application, only in the one where the service exist and register.
A solution for this case would be to have a flag in the configuration that specify this. In the core you would have an IF that would check the value of this flag.
Another solution is to check if a specific service was register in AngularJS or not. If the service was register that you would execute your own logic.
To check if a service was register or not in AngularJS container you need to call the ‘has’ method of ‘inhector’. It will return TRUE if the service was register.
if ($injector.has('httpInterceptorService')) { $httpProvider.interceptors.push('httpInterceptorService&#…

Fundamental Books of a Software Engineer (version 2018)

More then six years ago I wrote a blog post about fundamental books that any software engineer (developer) should read. Now it is an excellent time to update this list with new entries.

There are 5 different categories of books, that represent the recommended path. For example, you start with Coding books, after that, you read books about Programming, Design and so on.
There are some books about C++ that I recommend not because you shall know C++, only because the concepts that you can learn from it.


Writing solid codeCode completeProgramming Pearls, more programming pearls(recommended)[NEW] Introduction to Algorithms


Refactoring (M. Fowler)Pragmatic ProgrammerClean code[NEW] Software Engineering: A Practitioner's Approach[NEW] The Mythical Man-Month[NEW] The Art of Computer Programming


Applying UML and Patterns (GRASP patterns)C++ coding standards (Sutter, Alexandrescu)The C++ programming language (Stroustrup, Part IV)Object-oriented programming (Peter Coad)P…