views:

142

answers:

3

I'm working on a small distributed system, which is completely message driven. Right now, I usually open up a socket each time I have to send something and close it right afterwards. State is only maintained on the server side (for instance, if no message arrives for 5 minutes from a client, consider it dead).

However, I have to do some low-level scheduling of messages on the client as well (if a status message cannot reach the server, retry, if still fails, assume server is down, switch to different server, etc.), as well as having to manually listen on both client and server (plus exchanging the information how to reach the client from the server). I'm also planning to add some kind of broadcast system, but this is starting to pile up ... so the question is, is there some existing bus/messaging system for .NET that works with Mono and Microsoft, which handles this messaging stuff? I looked at NServiceBus, but it depends on MSMQ (still true?), which is more-or-less supported on Mono; all in all, NServiceBus already looks a bit too heavyweight. Ideally, the system would support 1:1 and 1:N connections, robustly handle errors and report them, and have some advanced features as well (queueing messages, security).

+2  A: 

Have you looked into RabbitMQ?

Noon Silk
Seems to be in Beta right now (the C# interface, that is).
Anteru
That's just the interface, I wouldn't worry about it. At worst it would be better, I'd think, than a hand-written thing. Especially given you can review the source.
Noon Silk
FWIW, Mono's (alpha) implementation of System.Messaging uses RabbitMQ.http://www.mono-project.com/SystemMessaging
mhutch
A: 

Have you taken a look at Mono-Olive? I know they were implementing WCF, this would probably be your best option if they have implemented enough to be useful by now.

Alex
Looks work-in-progress at best; problem is, it should be robust -- at the very least a few released versions.
Anteru
+1  A: 

Marc Gravell's protobuf-net library. Googles protocol buffers has support for lots of languages.

FlappySocks