public void Fail(PersistentQueueItem <T> item) { Guard.ArgumentNotNull <PersistentQueueItem <T> >(item); Guard.ArgumentPositive(item.Id); this.FailImpl(item); Interlocked.Increment(ref this.count); }
public void Save(PersistentQueueItem <T> item) { this.MultiSave(new PersistentQueueItem <T>[] { item }); }
protected override List <PersistentQueueItem <T> > MultiLoadImpl(int batch) { List <PersistentQueueItem <T> > result = new List <PersistentQueueItem <T> >(batch); using (EfzConnection connection = new EfzConnection(this.connString)) { EfzCommand command = connection.CreateCommand(); command.CommandText = "select top " + batch + " Id, Payload, EnqueueTime, Priority, Try from QueueItems where State = 0 order by Priority"; connection.Open(); using (EfzDataReader reader = command.ExecuteReader()) { while (reader.Read()) { result.Add(PersistentQueueItem <T> .FromDataReader(reader)); } } if (result.Count > 0) { StringBuilder ids = new StringBuilder(result[0].Id.ToString()); for (int i = 1; i < result.Count; i++) { ids.Append(","); ids.Append(result[i].Id); } command.CommandText = "update QueueItems set State = 1 where Id in (" + ids.ToString() + ");"; command.ExecuteNonQuery(); } } return(result); }
protected override void FailImpl(PersistentQueueItem <T> item) { using (EfzConnection connection = new EfzConnection(this.connString)) { EfzCommand command = connection.CreateCommand(); command.CommandText = string.Format("update QueueItems set Priority = {0}, Try = {1}, State = 0 where Id = {2}", item.Priority, item.Try, item.Id); connection.Open(); command.ExecuteNonQuery(); } }
protected override void RemoveImpl(PersistentQueueItem <T> item) { using (EfzConnection connection = new EfzConnection(this.connString)) { EfzCommand command = connection.CreateCommand(); command.CommandText = "delete from QueueItems where Id = " + item.Id; connection.Open(); command.ExecuteNonQuery(); } }
protected override void DiscardImpl(PersistentQueueItem <T> item) { using (EfzConnection connection = new EfzConnection(this.connString)) { string sql = string.Format("delete from QueueItems where Id = {0}; insert into DiscardQueueItems(Id, Payload, EnqueueTime) values({0}, '{1}', '{2}');", item.Id, item.PayloadToJson(), item.EnqueueTime.ToString("yyyy-MM-dd HH:mm:ss")); EfzCommand command = connection.CreateCommand(); command.CommandText = sql; connection.Open(); command.ExecuteNonQuery(); } }
public static PersistentQueueItem <T> FromDataReader(IDataReader reader) { Guard.ArgumentNotNull <IDataReader>(reader); return(new PersistentQueueItem <T> { Id = (int)reader["Id"], EnqueueTime = (DateTime)reader["EnqueueTime"], Priority = (long)reader["Priority"], Try = (int)reader["Try"], Payload = PersistentQueueItem <T> .PayloadFromJson((string)reader["Payload"]) }); }
protected override void MultiSaveImpl(params PersistentQueueItem <T>[] items) { using (EfzConnection connection = new EfzConnection(this.connString)) { StringBuilder sql = new StringBuilder(); for (int i = 0; i < items.Length; i++) { PersistentQueueItem <T> item = items[i]; sql.Append(string.Format("insert into QueueItems(Payload, EnqueueTime, Priority, Try, State) values('{0}', '{1}', {2}, 0, 0);", item.PayloadToJson().Replace("'", "''"), item.EnqueueTime.ToString("yyyy-MM-dd HH:mm:ss"), item.Priority)); } EfzCommand command = connection.CreateCommand(); command.CommandText = sql.ToString(); connection.Open(); command.ExecuteNonQuery(); } }
private void InternalQueueItemHandler(PersistentQueueItem <T> item) { try { bool success = this.queueItemHandler(this, item.Payload); if (success) { this.persistence.Remove(item); } else { item.Try++; if (item.Try < this.maxTry) { item.Priority += this.FailPenaltyTicks; this.persistence.Fail(item); Monitor.Enter(this.queueLock); Monitor.PulseAll(this.queueLock); Monitor.Exit(this.queueLock); } else { this.persistence.Discard(item); LoggerWrapper.Logger.Error(string.Format("{0}: Discard item after {1} try: EnqueueTime: {2}, Data: {3}", new object[] { this.queueName, this.maxTry, item.EnqueueTime, item.PayloadToJson() })); } } } catch (Exception ex) { LoggerWrapper.Logger.Error("PersistentQueueProcessor", ex); } }
public void Discard(PersistentQueueItem <T> item) { Guard.ArgumentNotNull <PersistentQueueItem <T> >(item); Guard.ArgumentPositive(item.Id); this.DiscardImpl(item); }
protected abstract void DiscardImpl(PersistentQueueItem <T> item);
protected abstract void FailImpl(PersistentQueueItem <T> item);
public void Remove(PersistentQueueItem <T> item) { Guard.ArgumentNotNull <PersistentQueueItem <T> >(item); Guard.ArgumentPositive(item.Id); this.RemoveImpl(item); }
protected abstract void RemoveImpl(PersistentQueueItem <T> item);