Last active
July 20, 2018 18:15
-
-
Save lfgrando/2b952eefb95364c8f6b4ce3505965fc2 to your computer and use it in GitHub Desktop.
How to defer a ServiceBus message using custom properties.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public bool DoWork(BrokeredMessage message) | |
{ | |
if (message == null) | |
throw new ArgumentNullException(nameof(message)); | |
try | |
{ | |
if (!_isInitialized) | |
Initialize(); | |
var movementRollbackMessage = message.GetBody<MovementRollbackMessage>(); | |
((RequestData)Container.Context.Properties.RequestData).AddTenant(movementRollbackMessage.TenantId); | |
using (var communicationMovements = Container.Context.DependencyInjection.Resolve<ICommunicationMovementBusiness>()) | |
communicationMovements.Rollback(movementRollbackMessage.MovementId, movementRollbackMessage.Username); | |
// | |
return true; | |
} | |
catch (DeferredException) | |
{ | |
// Check for resubmits, complete message and send a clone with a deferred wait of 6,1 minutes | |
var resubmitCount = message.Properties.ContainsKey("ResubmitCount") ? (int)message.Properties["ResubmitCount"] : 0; | |
var deliveryCount = message.DeliveryCount > 0 ? 1 : 0; | |
if (resubmitCount >= 10) | |
{ | |
Log.Write($"Muitos retries: {resubmitCount}. Enviando para deadletter", String.Empty); | |
message.DeadLetter("Too many retries", $"ResubmitCount is {resubmitCount}"); | |
return false; | |
} | |
else | |
{ | |
using (var topic = new ServiceBusTopicRepository(Constants.ServiceBus.ServiceBusConnectionName, Constants.ServiceBus.CommunicationMovementRollback)) | |
topic.CloneAndSend(message, new Dictionary<string, object> { { "ResubmitCount", resubmitCount + deliveryCount } }, DateTime.UtcNow.AddSeconds(370)); | |
Log.Write($"Mensagem clonada. DeliveryCount: {deliveryCount} ResubmitCount: {resubmitCount} ClonedWith: {resubmitCount + deliveryCount}", string.Empty); | |
// Complete the message | |
return true; | |
} | |
} | |
catch (Exception ex) | |
{ | |
Log.Write($"Erro comum no rollback:{ex.Message}", $"Sub error:<br>{ex.InnerException?.Message}.<br>StackTrace:<br>{ex.StackTrace}."); | |
throw; | |
} | |
finally | |
{ | |
((RequestData)Container.Context.Properties.RequestData).RemoveTenant(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment