Service Bus Evaluation

Nov 30, 2009 at 12:06 PM

Hello,

I'm currently evaluating Service Bus Implementations for .NET. We have the following needs:

- Some peers are "road warriors" - they are not alway online, have changing IP adresses, and some of them are limited to the .NET compact framework (Windows CE / Windows Mobile).

- Some peers are more like a traditional "server" role, we want to have multiple instances running on different machines with failover and possibly load balancing.

- Main communication is between one road warrior and one server, but we foresee the possible need of peer-to-peer communication between road warriors (maybe with a server as routing host / hop)

- We have some special use cases with large data packets (some scientific project) so we want to control message serialization.

- For some messages, we need full transaction safety / reliable delivery.

- As we communicate over unsafe networks (the internet), we need transparent encryption and authentication (maybe via certificates).

- We also need an efficient in-process messaging infrastructure - extra bonus points when NServiceBus can also provide that. :-)

Is Simple Service Bus worth a closer look, or is it impossible to fulfil our requirements?

Thanks a lot,
Markus Schaber

Developer
Nov 30, 2009 at 3:48 PM
Hi Markus,

I don't have an extensive knowledge of service buses, but I can tell you that SSB is highly customizable, and that I'm using it with ActiveMQ, which is much more interesting than MSMQ.
To answer some of your concerns:
- your road warriors can connect to your servers using simple web services or REST APIs, as it will work with any technology stack. Confidentiality can be enforced with SSL.
- on the server side, using a message bus such as ActiveMQ, allows you to scale and load balance your message processing using as many message consumers as needed. Also, ActiveMQ supports load balancing and failover with a cluster of brokers.
- sending big data packets: ActiveMQ does not limit the size of a message (except that it must fit in memory!), compared to MSMQ which is limited to 4Mb. Also, ActiveMQ allows you to send a stream to a destination, and it will automatically and transparently chunk it, allowing you send gigabytes of data.
- in order to do some message routing, you can benefit from the integration of Camel within ActiveMQ, which allows you to do any kind of messaging pattern.
- transactions and reliable delivery are a core feature of ActiveMQ. Also, ActiveMQ will detect that your consumer tried to consume a message n times, and it will automatically move it to a dead letter queue, to avoid endless looping (you can also provide your custom dead letter strategy).
- I think that SSB can dispatch messages internally.
- for the serialization of the messages, you can provide your own serializer to SSB that can do whatever you need. In my implementation of ActiveMQ transport, I allow sending a message containing a couple of properties and a binary part as a binary activemq message, decorated by message properties, for efficiency. This allows me to send zip archives containing multiple files in a single message.
- also you'll need some tooling. I developed a message audit plugin for activeMQ in order to understand the message flow and be able to look at the content of the sent messages, once they were consumed. I will publish it on google code soon.
We're using a very good infrastructure monitoring tool (http://www.hyperic.com/) which recognizes our ActiveMQ brokers and allows us to monitor the queues and the consumers, and define alerts if something goes wrong.

Hope this helps,

Morgan

On Mon, Nov 30, 2009 at 8:06 AM, MarkusSchaber <notifications@codeplex.com> wrote:

From: MarkusSchaber

Hello,

I'm currently evaluating Service Bus Implementations for .NET. We have the following needs:

- Some peers are "road warriors" - they are not alway online, have changing IP adresses, and some of them are limited to the .NET compact framework (Windows CE / Windows Mobile).

- Some peers are more like a traditional "server" role, we want to have multiple instances running on different machines with failover and possibly load balancing.

- Main communication is between one road warrior and one server, but we foresee the possible need of peer-to-peer communication between road warriors (maybe with a server as routing host / hop)

- We have some special use cases with large data packets (some scientific project) so we want to control message serialization.

- For some messages, we need full transaction safety / reliable delivery.

- As we communicate over unsafe networks (the internet), we need transparent encryption and authentication (maybe via certificates).

- We also need an efficient in-process messaging infrastructure - extra bonus points when NServiceBus can also provide that. :-)

Is Simple Service Bus worth a closer look, or is it impossible to fulfil our requirements?

Thanks a lot,
Markus Schaber

Read the full discussion online.

To add a post to this discussion, reply to this email (SimpleServiceBus@discussions.codeplex.com)

To start a new discussion for this project, email SimpleServiceBus@discussions.codeplex.com

You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe or change your settings on codePlex.com.

Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at codeplex.com


Dec 3, 2009 at 7:01 AM

Hi, LiveToCode,

Thanks for your answer.

Connecting to SSB via web services / REST APIs Seems to have one drawback: We have to handle missing connectivity "by hand". We'd prefer an implementation which has some kind of local buffer queues, so our applications running on .NET Compact Framework can "fire and forget", and the service bus implementation cares for retrying until the infrastructure server is available. From what you tell, I'm afraid SSB cannot do that, right?

 

Thanks,
markus

Developer
Dec 3, 2009 at 12:17 PM
Hi Markus,

I didn't realize you were thinking to use SSB within the compact framework! Unfortunately, I'm really not sure that it would even compile!
So, SSB is still a good candidate for your server side processing. For the client side, you can look at Microsoft smart client software factory (http://msdn.microsoft.com/en-us/library/aa480482.aspx) but not sure it will work in the compact framework either...
You can check if you can use a compact edition of sql server in order to queue your requests, and then use the replication services in order to transfer your requests to a server, or just send the pending items to a web service/or active mq broker...

Morgan

On Thu, Dec 3, 2009 at 3:01 AM, MarkusSchaber <notifications@codeplex.com> wrote:

From: MarkusSchaber

Hi, LiveToCode,

Thanks for your answer.

Connecting to SSB via web services / REST APIs Seems to have one drawback: We have to handle missing connectivity "by hand". We'd prefer an implementation which has some kind of local buffer queues, so our applications running on .NET Compact Framework can "fire and forget", and the service bus implementation cares for retrying until the infrastructure server is available. From what you tell, I'm afraid SSB cannot do that, right?

 

Thanks,
markus

Read the full discussion online.

To add a post to this discussion, reply to this email (SimpleServiceBus@discussions.codeplex.com)

To start a new discussion for this project, email SimpleServiceBus@discussions.codeplex.com

You are receiving this email because you subscribed to this discussion on CodePlex. You can unsubscribe or change your settings on codePlex.com.

Please note: Images and attachments will be removed from emails. Any posts to this discussion will also be available online at codeplex.com


Dec 11, 2009 at 7:06 AM

Hi, Morgan,

I did not know that the compact edition of SQL server actually supports replication, I'll have a look into this, thanks!

 

Markus