/// <summary> /// See IQueueService. /// </summary> public void Enqueue(QueueMessage message) { try { message.Id = Guid.NewGuid(); this.manager.Get(message.QueueName).Enqueue(message); } catch (FaultException<QueueErrorInfo>) { throw; } catch (Exception ex) { ErrorLogger.Log(ex); var errorInfo = QueueErrorInfo.FromErrorCode(QueueErrorCode.CannotEnqueue); errorInfo.QueueMessage = message; throw new FaultException<QueueErrorInfo>(errorInfo); } }
private void MoveToTransit(QueueMessage message) { var fileName = string.Format("{0}.qm", message.Id); var sourceFile = Path.Combine(this.persistLocation, fileName); var targetFile = Path.Combine(this.transitLocation, fileName); File.Move(sourceFile, targetFile); }
private void Persist(QueueMessage message) { var file = Path.Combine(this.persistLocation, string.Format("{0}.qm", message.Id)); using (var fs = File.OpenWrite(file)) { formatter.Serialize(fs, message); fs.Flush(); } }
public void Enqueue(QueueMessage message) { var messageCopy = message; var messageType = messageCopy.Type; var queueExists = false; this.queueMap.ExecuteWithinReadLock(value => queueExists = value.ContainsKey(messageType)); if (!queueExists) { this.queueMap.ExecuteWithinWriteLock(value => { if (value.ContainsKey(message.Type)) return; value[message.Type] = new ConcurrentQueue<QueueMessage>(); }); } this.queueMap.ExecuteWithinReadLock(value => { value[messageCopy.Type].Enqueue(messageCopy); if (this.queueInfo.IsPersisted) this.Persist(messageCopy); }); }