private FDMessageEnvelope MaybeReserveOne()
        {
            var qPath = FDMessageBus.GetQueuePath(_busName, _exchangeName, _queueName);

            foreach (var it in _messageNames)
            {
                if (_taken.Contains(it))
                {
                    continue;
                }


                var mmtx = FDMessageBus.GetMessageMutex(_exchangeName, _queueName, it);


                if (mmtx.Open())
                {
                    try
                    {
                        var fn = Path.Combine(qPath, it);
                        var fi = new FileInfo(fn);
                        _taken.Add(it);
                        if (fi.Exists)
                        {
                            using (var sr = fi.OpenText())
                            {
                                var text   = sr.ReadToEnd();
                                var retval = JsonConvert.DeserializeObject <FDMessageEnvelope>(text,
                                                                                               _serializerSettings);
                                if (null != retval)
                                {
                                    retval.Lock = mmtx;

                                    return(retval);
                                }
                            }
                        }


                        mmtx.Release();
                    }
                    catch     // not finally, because if we can open the message, control of the mutex passes
                              // to the caller
                    {
                        mmtx.Release();
                    }
                }


                mmtx.Dispose();
            }


            return(null);
        }