InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

NServiceBus - Makes Building Enterprise .NET Systems Easier

Posted by Robert Bazinet on Sep 06, 2007

Sections
Development,
Enterprise Architecture
Topics
SOA Platforms ,
ESB ,
SOA ,
SOA Appliance ,
.NET
Tags
SOA Adoption ,
Microsoft ,
Business Architecture ,
Component Based Architecture

NServiceBus is an open source communications framework that will help guide developers who are trying to build enterprise .NET systems, without falling into many of the typical pitfalls.  It provides scalability critical features like publish/subscribe support, integrated long-running workflow and deep extensibility.  According to its creator, this makes an ideal foundation for building distributed application.

NServiceBus was first released in January 2006 and was deployed in a large-scale distributed system in March of 2006.  InfoQ had the opportunity to speak with Udi Dahan, creator of NServiceBus.    

The reason for its creation:
There were two major forces that drove me to write NServiceBus. First of all I wanted to formalize the way Service Layer classes were written when using asynchronous messaging (regardless of Web Services). And second I wanted to formalize a communications API which supported publish/subscribe semantics so that I could freely move between transports – whether they inherently supported publish/subscribe or not.  It was also very important to me to not use a centralized broker, otherwise I couldn't have supported the high levels of scalability needed.  Finally, I made the step of formalizing the way long-running workflows and orchestrations connects to asynchronous messaging.
For any developer who architects using SOA principles, on the basis for using NServiceBus over some other methodology or some other so-called enterprise service bus:
NServiceBus makes it difficult to work in ways that will hurt your scalability. Since the asynchronous messaging patterns are brought to the fore, developers will, by default, avoid the temporal coupling so prevalent in most Web Service implementations. Other methodologies make so many other options just as easy to use that developers can make mistakes that will hurt their scalability and availability and only find out about those mistakes in production .

Another thing NServiceBus does differently is to totally isolate all workflow code from all technologies. This makes it easy to unit-test workflow classes, making it possible to iterate quickly on the development of key business processes. These portable .NET POJOs give developers the flexibility to host their workflows in whatever runtime they want.
Having noticed NServiceBus is built with MSMQ in mind or as an option, when asked why this choice of direction:
The core of NServiceBus is not dependent on MSMQ. The extensibility points of NServiceBus allow you to plug in your own communication transport, subscription storage, and workflow persister. I've already implemented a transport over MSMQ, and another over WCF's NetTCP binding. Developers can use those as-is or write their own. Many of the SOA products currently out there are much more tied to HTTP, so this is something of a break from the common practice.

I chose to use MSMQ since it is one of the two main Microsoft communications technologies that enables parties to communicate in a disconnected fashion (SQL Server Service Broker is the other). MSMQ has a much more accessible API in that it is directly available as a part of the .NET Framework whereas Service Broker currently isn't. I consider disconnected communications a critical part of any SOA infrastructure since the Tenet of Service Autonomy does not allow us to assume that the service with which we wish to communicate is currently available.

NServiceBus is an open source product licensed under the Creative Commons Attribution 3.0 License .  IT is packaged as a set of .NET assemblies which can be hosted in any application or clients licensed.

Since the interview was brief, we asked Udi what information he would like to pass on to readers who were not very familiar with service-oriented  architecture (SOA) or wanted to learn more about implementing SOA: 

If you're getting involved in developing service-type applications and aren't familiar with SOA you need to understand that it is significantly different from what you've done so far. You do not just slap some attributes on the same kind of code you've always written. Before getting bogged down in the specific technology you're using, take the time to understand the higher level messaging patterns services employ - they can save you from a serious rewrite.
Udi was recently interviewed on DotNetRocks about all things SOA including some discussion about NServiceBus.  You can learn more about Udi at his blog.
  • This article is part of a featured topic series on SOA
NServiceBus web site by Udi Dahan Posted
  1. Back to top

    NServiceBus web site

    by Udi Dahan

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.