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); }
void DeleteMessage() { var qPath = FDMessageBus.GetQueuePath(_bus, _exchange, _queueName); var fn = Path.Combine(qPath, string.Format("{0}.msg", _message.Id)); var fi = new FileInfo(fn); if (fi.Exists) { fi.Delete(); } }
public IExchangeSpecifier DeclareQueue(string queueName, params string[] boundRoutes) { var qPath = _parent.GetQueuePath(_exchangeName, queueName); var qMtx = FDMessageBus.GetQueueMutex(_exchangeName, queueName); var exPath = _parent.GetExchangePath(_exchangeName); var exMtx = FDMessageBus.GetExchangeMutex(_exchangeName); using (exMtx) using (qMtx) { if (exMtx.Wait(TimeSpan.FromSeconds(30)) && qMtx.Wait(TimeSpan.FromSeconds(30))) { var di = new DirectoryInfo(qPath); if (di.Exists) { return(this); } di.Create(); var fi = new FileInfo(Path.Combine(qPath, "routes.json")); using (var sw = fi.CreateText()) { var q = new MessageQueueDeclaration { Name = queueName }; q.Bindings.AddRange(boundRoutes); var text = JsonConvert.SerializeObject(q); sw.Write(text); sw.Flush(); sw.Close(); } } } return(this); }
private void GetMessageNames() { _messageNames.Clear(); var qPath = FDMessageBus.GetQueuePath(_busName, _exchangeName, _queueName); var di = new DirectoryInfo(qPath); if (!di.Exists) { return; } _messageNames.AddRange(di.EnumerateFiles("*.msg").Select(it => it.Name)); }
public void Send() { lock (_sendLock) { while (_pending.Any()) { var qPath = FDMessageBus.GetQueuePath(_busName, _exchangeName, _queueName); var di = new DirectoryInfo(qPath); if (!di.Exists) { throw new FileNotFoundException(); } //var qMtx = FDMessageBus.GetQueueMutex(_exchangeName, _queueName); //using (qMtx) { //if (qMtx.Wait(TimeSpan.FromSeconds(120))) { object item; while (_pending.TryDequeue(out item)) { var id = Guid.NewGuid().ToString(); var msgPath = Path.Combine(qPath, string.Format("{0}.msg", id)); using (var sw = File.CreateText(msgPath)) { var text = JsonConvert.SerializeObject(new FDMessageEnvelope { Id = id, Data = item, MessageType = item.GetType() }, _jsonSerializerSettings); sw.Write(text); sw.Flush(); sw.Close(); } } } } } } }