private void ErroredWork(string workId, RedisWork <TWork> redisWork) { using (var redisClient = GetRedisClient()) using (var redisTransaction = redisClient.CreateTransaction()) { redisTransaction.QueueCommand(client => client.RemoveItemFromList(_redisWorkerOptions.NamingStrategy.ProcessingName, workId)); if (redisWork.RetryCount.Equals(_redisWorkerOptions.Retries)) { redisWork.WhenErrored = DateTime.UtcNow; var serializedRedisWork = JsonSerializer.SerializeToString(redisWork); redisTransaction.QueueCommand(client => client.RemoveEntryFromHash(_redisWorkerOptions.NamingStrategy.WorkName, workId)); redisTransaction.QueueCommand(client => client.SetEntryInHash(_redisWorkerOptions.NamingStrategy.ErrorName, workId, serializedRedisWork)); } else { redisWork.RetryCount++; var serializedRedisWork = JsonSerializer.SerializeToString(redisWork); redisTransaction.QueueCommand(client => client.PushItemToList(_redisWorkerOptions.NamingStrategy.QueueName, workId)); redisTransaction.QueueCommand(client => client.SetEntryInHash(_redisWorkerOptions.NamingStrategy.WorkName, workId, serializedRedisWork)); } redisTransaction.Commit(); } }
private void CompletedWork(string workId, RedisWork <TWork> redisWork) { using (var redisClient = GetRedisClient()) using (var redisTransaction = redisClient.CreateTransaction()) { redisWork.WhenCompleted = DateTime.UtcNow; var serializedRedisWork = JsonSerializer.SerializeToString(redisWork); redisTransaction.QueueCommand(client => client.RemoveItemFromList(_redisWorkerOptions.NamingStrategy.ProcessingName, workId)); redisTransaction.QueueCommand(client => client.RemoveEntryFromHash(_redisWorkerOptions.NamingStrategy.WorkName, workId)); if (_redisWorkerOptions.Audit) { redisTransaction.QueueCommand(client => client.SetEntryInHash(_redisWorkerOptions.NamingStrategy.AuditName, workId, serializedRedisWork)); } redisTransaction.Commit(); } }
public static void QueueWork <TWork>(this IRedisClient redisClient, TWork work, IRedisWorkerNamingStrategy redisWorkerNamingStrategy) { var workId = Guid.NewGuid().ToString(); using (var redisTransaction = redisClient.CreateTransaction()) { var redisWork = new RedisWork <TWork> { WhenQueued = DateTime.UtcNow, RetryCount = 0, Work = work }; var serializedRedisWork = JsonSerializer.SerializeToString(redisWork); redisTransaction.QueueCommand(client => client.PushItemToList(redisWorkerNamingStrategy.QueueName, workId)); redisTransaction.QueueCommand(client => client.SetEntryInHash(redisWorkerNamingStrategy.WorkName, workId, serializedRedisWork)); redisTransaction.Commit(); } }