feat(inbound): routed Route.To().WaitForAttribute — contract + central path (spec §6)
This commit is contained in:
@@ -445,6 +445,25 @@ public class CommunicationService
|
||||
envelope, _options.IntegrationTimeout, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Routes an inbound API wait-for-attribute request to a site (spec §6).
|
||||
/// </summary>
|
||||
/// <param name="siteId">The target site identifier.</param>
|
||||
/// <param name="request">The wait-for-attribute route request.</param>
|
||||
/// <param name="cancellationToken">Cancellation token.</param>
|
||||
/// <returns>The wait-for-attribute route response.</returns>
|
||||
public async Task<RouteToWaitForAttributeResponse> RouteToWaitForAttributeAsync(
|
||||
string siteId, RouteToWaitForAttributeRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var envelope = new SiteEnvelope(siteId, request);
|
||||
// A wait legitimately blocks up to request.Timeout on the site, so the cluster
|
||||
// Ask must be bounded by the WAIT deadline (plus integration-timeout slack for
|
||||
// the round trip), not the generic IntegrationTimeout used by the other routes.
|
||||
var askTimeout = request.Timeout + _options.IntegrationTimeout;
|
||||
return await GetActor().Ask<RouteToWaitForAttributeResponse>(
|
||||
envelope, askTimeout, cancellationToken);
|
||||
}
|
||||
|
||||
// ── Notification Outbox (central-local actor — Asked directly, no SiteEnvelope) ──
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user