title: Message queueing solution for internet-connected, distributed C# clients
body: <p>I am in the initial phase of investigating a message queueing solution for C# and I'd appreciate any experience, lessons learned, war stories, etc.  I also have a couple of specific questions about MSMQ's suitability for our configuration.</p>
  
  <p>Briefly, we have a distributed architecture: a variety of server-side events generate work items that are retrieved by our deployed clients.  Those clients connect to the server, retrieve the work, and process it, then go back to "waiting for work to do."</p>
  
  <p>A couple of relevant details about these clients:</p>
  
  <ol>
  <li>We have a few hundreds of client installations today, and need to be ready for growth to tens of thousands in the next 18 months.</li>
  <li>The clients never submit tasks to the server -- they are "pull only."</li>
  <li>Payloads to the clients are &lt;= 1K each.</li>
  <li>We don't need heavy-weight authentication nor encryption of the traffic (though that's a fine bonus)</li>
  <li>Our clients run on a variety of MS operating systems, >= WinXP-SP1.  Some are parts of windows active directories, or windows domains, or ad hoc workgroups.</li>
  <li>Mostly, the clients are idle.  We want to efficiently "wait for work" then respond to the work as quickly as possible (i.e., we want clients to receive the work item ASAP after it's queued)</li>
  <li>Occasionally, our clients disappear from the internet for a time: their machines are shut off for a day, or overnight, etc.  We want work items to arrive when they're back online.  Put another way, we do need message reliability.</li>
  <li>We control all of the client and server code, but not the client environments (though our installers do install prerequisite software like .NET 3.5, if it's not there already)</li>
  </ol>
  
  <p>So, given the above - will MSMQ work "naturally" for us?  I've not found a clear answer to how (or if) MSMQ handles clients listening for messages when they aren't in the domain/active directory and when they are connecting over the internet.  So far, my reading on MSMQ feels pretty "enterprise-centric" - is our non-enterprise requirement going to be a problem with MSMQ?</p>
  
  <p>What other solutions have you used in the past in similar setups?  </p>
  
  <p>And, of course, what other questions should I be asking?  ;-)</p>
  
  <p>Thanks!</p>