Commit 0025e3cb authored by Savorboard's avatar Savorboard

refactor

parent bcca8458
...@@ -36,6 +36,7 @@ namespace DotNetCore.CAP ...@@ -36,6 +36,7 @@ namespace DotNetCore.CAP
public async Task<OperateResult> ExecuteAsync(IStorageConnection connection, IFetchedMessage fetched) public async Task<OperateResult> ExecuteAsync(IStorageConnection connection, IFetchedMessage fetched)
{ {
//return await Task.FromResult(OperateResult.Success);
var message = await connection.GetReceivedMessageAsync(fetched.MessageId); var message = await connection.GetReceivedMessageAsync(fetched.MessageId);
try try
{ {
...@@ -75,9 +76,24 @@ namespace DotNetCore.CAP ...@@ -75,9 +76,24 @@ namespace DotNetCore.CAP
return OperateResult.Success; return OperateResult.Success;
} }
catch (SubscriberNotFoundException ex)
{
_logger.LogError(ex.Message);
await AddErrorReasonToContent(message, ex.Message, connection);
await _stateChanger.ChangeStateAsync(message, new FailedState(), connection);
fetched.RemoveFromQueue();
return OperateResult.Failed(ex);
}
catch (Exception ex) catch (Exception ex)
{ {
_logger.ExceptionOccuredWhileExecutingJob(message?.Name, ex); _logger.ExceptionOccuredWhileExecutingJob(message?.Name, ex);
fetched.Requeue();
return OperateResult.Failed(ex); return OperateResult.Failed(ex);
} }
} }
...@@ -89,7 +105,10 @@ namespace DotNetCore.CAP ...@@ -89,7 +105,10 @@ namespace DotNetCore.CAP
var executeDescriptorGroup = _selector.GetTopicExector(receivedMessage.Name); var executeDescriptorGroup = _selector.GetTopicExector(receivedMessage.Name);
if (!executeDescriptorGroup.ContainsKey(receivedMessage.Group)) if (!executeDescriptorGroup.ContainsKey(receivedMessage.Group))
throw new SubscriberNotFoundException(receivedMessage.Name + " has not been found."); {
var error = $"Topic:{receivedMessage.Name}, can not be found subscriber method.";
throw new SubscriberNotFoundException(error);
}
// If there are multiple consumers in the same group, we will take the first // If there are multiple consumers in the same group, we will take the first
var executeDescriptor = executeDescriptorGroup[receivedMessage.Group][0]; var executeDescriptor = executeDescriptorGroup[receivedMessage.Group][0];
...@@ -99,11 +118,6 @@ namespace DotNetCore.CAP ...@@ -99,11 +118,6 @@ namespace DotNetCore.CAP
return OperateResult.Success; return OperateResult.Success;
} }
catch (SubscriberNotFoundException ex)
{
_logger.LogError("Can not be found subscribe method of name: " + receivedMessage.Name);
return OperateResult.Failed(ex);
}
catch (Exception ex) catch (Exception ex)
{ {
_logger.ConsumerMethodExecutingFailed($"Group:{receivedMessage.Group}, Topic:{receivedMessage.Name}", _logger.ConsumerMethodExecutingFailed($"Group:{receivedMessage.Group}, Topic:{receivedMessage.Name}",
...@@ -113,8 +127,7 @@ namespace DotNetCore.CAP ...@@ -113,8 +127,7 @@ namespace DotNetCore.CAP
} }
} }
private static async Task<bool> UpdateMessageForRetryAsync(CapReceivedMessage message, private static async Task<bool> UpdateMessageForRetryAsync(CapReceivedMessage message, IStorageConnection connection, string exceptionMessage)
IStorageConnection connection, string exceptionMessage)
{ {
var retryBehavior = RetryBehavior.DefaultRetry; var retryBehavior = RetryBehavior.DefaultRetry;
...@@ -125,18 +138,25 @@ namespace DotNetCore.CAP ...@@ -125,18 +138,25 @@ namespace DotNetCore.CAP
var due = message.Added.AddSeconds(retryBehavior.RetryIn(retries)); var due = message.Added.AddSeconds(retryBehavior.RetryIn(retries));
message.ExpiresAt = due; message.ExpiresAt = due;
await AddErrorReasonToContent(message, exceptionMessage, connection);
return true;
}
public static Task AddErrorReasonToContent(CapReceivedMessage message, string description, IStorageConnection connection)
{
var exceptions = new List<KeyValuePair<string, string>> var exceptions = new List<KeyValuePair<string, string>>
{ {
new KeyValuePair<string, string>("ExceptionMessage", exceptionMessage) new KeyValuePair<string, string>("ExceptionMessage", description)
}; };
message.Content = Helper.AddJsonProperty(message.Content, exceptions); message.Content = Helper.AddJsonProperty(message.Content, exceptions);
using (var transaction = connection.CreateTransaction()) using (var transaction = connection.CreateTransaction())
{ {
transaction.UpdateMessage(message); transaction.UpdateMessage(message);
await transaction.CommitAsync(); transaction.CommitAsync();
} }
return true; return Task.CompletedTask;
} }
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment