private Task HandleForwardedMessageAsync(ForwardingOutcome outcome, CancellationToken cancellationToken) { switch (outcome) { case ForwardingOutcome.Acknowledge: return(Message.AcknowledgeAsync(cancellationToken)); case ForwardingOutcome.Rollback: return(Message.RollbackAsync(cancellationToken)); case ForwardingOutcome.Reject: return(Message.RejectAsync(cancellationToken)); default: throw new InvalidOperationException("Invalid ForwardingOutcome value."); } }
/// <summary> /// Initializes a new instance of the <see cref="ForwardingReceiver"/> class. This constructor /// uses <see cref="MessagingScenarioFactory"/> to create the main <see cref="IReceiver"/> and /// <see cref="ISender"/> forwarders. /// </summary> /// <param name="name">The name of the forwarding receiver.</param> /// <param name="receiverName"> /// The name of the <see cref="IReceiver"/> that is the actual source of messages. /// </param> /// <param name="acknowledgeForwarderName"> /// The name of the <see cref="ISender"/> that received messages are forwarded to when /// their <see cref="IReceiverMessage.AcknowledgeAsync"/> method is called. /// </param> /// <param name="acknowledgeOutcome"> /// The outcome for received messages that have been forwarded to /// <see cref="AcknowledgeForwarder"/>. /// </param> /// <param name="rollbackForwarderName"> /// The name of the <see cref="ISender"/> that received messages are forwarded to when /// their <see cref="IReceiverMessage.RollbackAsync"/> method is called. /// </param> /// <param name="rollbackOutcome"> /// The outcome for received messages that have been forwarded to /// <see cref="RollbackForwarder"/>. /// </param> /// <param name="rejectForwarderName"> /// The name of the <see cref="ISender"/> that received messages are forwarded to when /// their <see cref="IReceiverMessage.RejectAsync"/> method is called. /// </param> /// <param name="rejectOutcome"> /// The outcome for received messages that have been forwarded to /// <see cref="RejectForwarder"/>. /// </param> public ForwardingReceiver(string name, string receiverName, string?acknowledgeForwarderName = null, ForwardingOutcome acknowledgeOutcome = ForwardingOutcome.Acknowledge, string?rollbackForwarderName = null, ForwardingOutcome rollbackOutcome = ForwardingOutcome.Rollback, string?rejectForwarderName = null, ForwardingOutcome rejectOutcome = ForwardingOutcome.Reject) : this(name ?? throw new ArgumentNullException(nameof(name)), MessagingScenarioFactory.CreateReceiver(receiverName ?? throw new ArgumentNullException(nameof(receiverName))),
public async Task RollbackHandlesInnerMessageAccordingToRollbackOutcomeWhenRollbackForwarderIsNotNull(ForwardingOutcome outcome) { using var forwarder = new FakeSender(); using var receiver = new FakeReceiver(); using var forwardingReceiver = new ForwardingReceiver("foo", receiver, rollbackForwarder: forwarder, rollbackOutcome: outcome); using var message = new FakeReceiverMessage("Hello, world!"); var forwardingMessage = new ForwardingReceiverMessage(forwardingReceiver, message); await forwardingMessage.RollbackAsync().ConfigureAwait(false); message.HandledBy.Should().Be($"{outcome}Async"); }
public async Task AcknowledgeHandlesInnerMessageAccordingToAcknowledgeOutcomeWhenAcknowledgeForwarderIsNotNull(ForwardingOutcome outcome) { var forwarder = new FakeSender(); var receiver = new FakeReceiver(); var forwardingReceiver = new ForwardingReceiver("foo", receiver, acknowledgeForwarder: forwarder, acknowledgeOutcome: outcome); var message = new FakeReceiverMessage("Hello, world!"); var forwardingMessage = new ForwardingReceiverMessage(forwardingReceiver, message); await forwardingMessage.AcknowledgeAsync(); message.HandledBy.Should().Be($"{outcome}Async"); }