fix(store-and-forward): resolve StoreAndForward-006,007,008,009 — transactional parked reads, PipeTo, fault-isolated activity events; 002/011/012 deferred
This commit is contained in:
@@ -31,12 +31,15 @@ public class ParkedMessageHandlerActor : ReceiveActor
|
||||
var sender = Sender;
|
||||
var siteId = _siteId;
|
||||
|
||||
// StoreAndForward-007: idiomatic PipeTo with explicit success/failure
|
||||
// projections instead of ContinueWith. Both projections touch only locals
|
||||
// (captured before the await), so they are safe to run off the actor thread.
|
||||
_service.GetParkedMessagesAsync(category: null, msg.PageNumber, msg.PageSize)
|
||||
.ContinueWith(t =>
|
||||
{
|
||||
if (t.IsCompletedSuccessfully)
|
||||
.PipeTo(
|
||||
sender,
|
||||
success: result =>
|
||||
{
|
||||
var entries = t.Result.Messages
|
||||
var entries = result.Messages
|
||||
.Select(m => new ParkedMessageEntry(
|
||||
MessageId: m.Id,
|
||||
TargetSystem: m.Target,
|
||||
@@ -51,14 +54,12 @@ public class ParkedMessageHandlerActor : ReceiveActor
|
||||
.ToList();
|
||||
|
||||
return new ParkedMessageQueryResponse(
|
||||
msg.CorrelationId, siteId, entries, t.Result.TotalCount,
|
||||
msg.CorrelationId, siteId, entries, result.TotalCount,
|
||||
msg.PageNumber, msg.PageSize, true, null, DateTimeOffset.UtcNow);
|
||||
}
|
||||
|
||||
return new ParkedMessageQueryResponse(
|
||||
},
|
||||
failure: ex => new ParkedMessageQueryResponse(
|
||||
msg.CorrelationId, siteId, [], 0, msg.PageNumber, msg.PageSize,
|
||||
false, t.Exception?.GetBaseException().Message, DateTimeOffset.UtcNow);
|
||||
}).PipeTo(sender);
|
||||
false, ex.GetBaseException().Message, DateTimeOffset.UtcNow));
|
||||
}
|
||||
|
||||
private void HandleRetry(ParkedMessageRetryRequest msg)
|
||||
@@ -66,18 +67,13 @@ public class ParkedMessageHandlerActor : ReceiveActor
|
||||
var sender = Sender;
|
||||
|
||||
_service.RetryParkedMessageAsync(msg.MessageId)
|
||||
.ContinueWith(t =>
|
||||
{
|
||||
if (t.IsCompletedSuccessfully)
|
||||
{
|
||||
return new ParkedMessageRetryResponse(
|
||||
msg.CorrelationId, t.Result,
|
||||
t.Result ? null : "Message not found or no longer parked.");
|
||||
}
|
||||
|
||||
return new ParkedMessageRetryResponse(
|
||||
msg.CorrelationId, false, t.Exception?.GetBaseException().Message);
|
||||
}).PipeTo(sender);
|
||||
.PipeTo(
|
||||
sender,
|
||||
success: retried => new ParkedMessageRetryResponse(
|
||||
msg.CorrelationId, retried,
|
||||
retried ? null : "Message not found or no longer parked."),
|
||||
failure: ex => new ParkedMessageRetryResponse(
|
||||
msg.CorrelationId, false, ex.GetBaseException().Message));
|
||||
}
|
||||
|
||||
private void HandleDiscard(ParkedMessageDiscardRequest msg)
|
||||
@@ -85,18 +81,13 @@ public class ParkedMessageHandlerActor : ReceiveActor
|
||||
var sender = Sender;
|
||||
|
||||
_service.DiscardParkedMessageAsync(msg.MessageId)
|
||||
.ContinueWith(t =>
|
||||
{
|
||||
if (t.IsCompletedSuccessfully)
|
||||
{
|
||||
return new ParkedMessageDiscardResponse(
|
||||
msg.CorrelationId, t.Result,
|
||||
t.Result ? null : "Message not found or no longer parked.");
|
||||
}
|
||||
|
||||
return new ParkedMessageDiscardResponse(
|
||||
msg.CorrelationId, false, t.Exception?.GetBaseException().Message);
|
||||
}).PipeTo(sender);
|
||||
.PipeTo(
|
||||
sender,
|
||||
success: discarded => new ParkedMessageDiscardResponse(
|
||||
msg.CorrelationId, discarded,
|
||||
discarded ? null : "Message not found or no longer parked."),
|
||||
failure: ex => new ParkedMessageDiscardResponse(
|
||||
msg.CorrelationId, false, ex.GetBaseException().Message));
|
||||
}
|
||||
|
||||
private static string ExtractMethodName(string payloadJson, Commons.Types.Enums.StoreAndForwardCategory category)
|
||||
|
||||
Reference in New Issue
Block a user