views:

295

answers:

3

Currently im developing a server for satelite monitoring of objects. In its current state it is very efficient and stable in hi load scenarios. Server must be able to handle 50+mln messages per day, or more if load balancing is used. It consists of gps data gateway(singleton), "databroker"(singleton), which is responsible for persisting data, providing it on request, and alerting subscribers about new data, login service(per call) and client service(per session), responsible for subscription and working with web interface and rich client.

At this state i can forsee those problems:

  1. Growing complexity if new services are added.
  2. Tight coupling.
  3. Hard to configure.
  4. Lots of low level code for handling subscriptions etc in future bl services(reporting for example).

To solve those problems i want to use something like ServiceBus.
MS solutions are to expensive for our customers, NServiceBus is frightening me a bit, due to its open source origins(and Class1 in source code=D) and CIO asked to avoid using it.
So i decided to write my own simple bus, and encountered problems with adressing and subscribing diffirent types of services(singleton, per session, per call) and also there is a requirement for load balancing.

I found quite elegant solution for this: use "adapters" for bus - wcf services for incapsulating some specific issues of working with services - like loadbalancing. So bus will only see adapters and route messages between them and they will forward messages further. But im concerned about perfomance and whole idea.. Will be very grateful to hear thoughts about all of this stuff=)
PS Bus and adapters use MSMQ for communication between them, but other services can use http,tcp bindings.
PS2 Sorry for my english, its not my native language=)

+1  A: 

You could try using "sql service broker" as a service bus

http://javiercrespoalvez.com/2009/03/using-sql-service-broker-in-net.html

The blog post also has links to other service buses you could try.

Shiraz Bhaiji
One of our system features is that our customer can use any db Nhibernate supports. Made some optimizations to it and load balancing among data stores.Checked Mass Transit and Simple Service Bus. Most of em utilize msmq heavily on both sides. I want to achive behaviour where 1 bus wcf service will have several endpoints to support diffirent MEPs. Now im thinking about 2 problems:1.How to store consumers for diffirent MEPs? 2.How to pass messages-serialize em to binary format or try to use standart wcf serializer. Trying to keep everything simple as possible.Thanks anyway=)
Alexey Anufriyev
A: 

Thanks for all replyes=) I was able to convince bosses to use NServiceBus. (After creating a working bus prototype on weekend =). Now it fits quite well into the system=)

Alexey Anufriyev
A: 

I'm probably just bringing the dead back but if you'd still like to implement your own bus these links may come in handy (on design level):

http://msdn.microsoft.com/en-us/magazine/cc500646.aspx

http://msdn.microsoft.com/en-us/magazine/cc546553.aspx

I found answers for some my questions about how dynamically register subservices and route messages from client to them by central router service

grapkulec