static async Task MessageHandler(ProcessSessionMessageEventArgs args) { var body = args.Message.Body.ToString(); Console.WriteLine($"Received Message: { body }"); // we can evaluate application logic and use that to determine how to settle the message. await args.CompleteMessageAsync(args.Message); }
private static async Task MessageHandler(ProcessSessionMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Message received from session processor: {body}"); // we can evaluate application logic and use that to determine how to settle the message. await args.CompleteMessageAsync(args.Message); // we can also set arbitrary session state using this receiver // the state is specific to the session, and not any particular message await args.SetSessionStateAsync(new BinaryData("some state")); }
///<inheritdoc cref="ServiceBusReceiver.CompleteMessageAsync(ServiceBusReceivedMessage, CancellationToken)"/> public virtual async Task CompleteMessageAsync( ServiceBusReceivedMessage message, CancellationToken cancellationToken = default) { if (_receiver != null) { await _receiver.CompleteMessageAsync(message, cancellationToken).ConfigureAwait(false); } else if (_eventArgs != null) { await _eventArgs.CompleteMessageAsync(message, cancellationToken).ConfigureAwait(false); } else { await _sessionEventArgs.CompleteMessageAsync(message, cancellationToken).ConfigureAwait(false); } }
public async Task UserSettledPropertySetCorrectly() { var msg = new ServiceBusReceivedMessage(); var args = new ProcessSessionMessageEventArgs( msg, new Mock <ServiceBusSessionReceiver>().Object, CancellationToken.None); Assert.IsFalse(msg.IsSettled); msg.IsSettled = false; await args.AbandonMessageAsync(msg); Assert.IsTrue(msg.IsSettled); await args.CompleteMessageAsync(msg); Assert.IsTrue(msg.IsSettled); msg.IsSettled = false; await args.DeadLetterMessageAsync(msg); Assert.IsTrue(msg.IsSettled); msg.IsSettled = false; await args.DeadLetterMessageAsync(msg, "reason"); Assert.IsTrue(msg.IsSettled); msg.IsSettled = false; await args.DeferMessageAsync(msg); Assert.IsTrue(msg.IsSettled); // getting or setting session state doesn't count as settling msg.IsSettled = false; await args.GetSessionStateAsync(); Assert.IsFalse(msg.IsSettled); msg.IsSettled = false; await args.SetSessionStateAsync(new byte[] { }); Assert.IsFalse(msg.IsSettled); }
public void UserSettledPropertySetCorrectlyOnException() { var msg = new ServiceBusReceivedMessage(); var mockReceiver = new Mock <ServiceBusSessionReceiver>(); mockReceiver .Setup(receiver => receiver.AbandonMessageAsync( It.IsAny <ServiceBusReceivedMessage>(), It.IsAny <IDictionary <string, object> >(), It.IsAny <CancellationToken>())) .Throws(new Exception()); mockReceiver .Setup(receiver => receiver.DeferMessageAsync( It.IsAny <ServiceBusReceivedMessage>(), It.IsAny <IDictionary <string, object> >(), It.IsAny <CancellationToken>())) .Throws(new Exception()); mockReceiver .Setup(receiver => receiver.CompleteMessageAsync( It.IsAny <ServiceBusReceivedMessage>(), It.IsAny <CancellationToken>())) .Throws(new Exception()); mockReceiver .Setup(receiver => receiver.DeadLetterMessageAsync( It.IsAny <ServiceBusReceivedMessage>(), It.IsAny <IDictionary <string, object> >(), It.IsAny <CancellationToken>())) .Throws(new Exception()); mockReceiver .Setup(receiver => receiver.DeadLetterMessageAsync( It.IsAny <ServiceBusReceivedMessage>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <CancellationToken>())) .Throws(new Exception()); var args = new ProcessSessionMessageEventArgs( msg, mockReceiver.Object, CancellationToken.None); Assert.IsFalse(msg.IsSettled); msg.IsSettled = false; Assert.That(async() => await args.AbandonMessageAsync(msg), Throws.InstanceOf <Exception>()); Assert.IsFalse(msg.IsSettled); Assert.That(async() => await args.CompleteMessageAsync(msg), Throws.InstanceOf <Exception>()); Assert.IsFalse(msg.IsSettled); msg.IsSettled = false; Assert.That(async() => await args.DeadLetterMessageAsync(msg), Throws.InstanceOf <Exception>()); Assert.IsFalse(msg.IsSettled); msg.IsSettled = false; Assert.That(async() => await args.DeadLetterMessageAsync(msg, "reason"), Throws.InstanceOf <Exception>()); Assert.IsFalse(msg.IsSettled); msg.IsSettled = false; Assert.That(async() => await args.DeferMessageAsync(msg), Throws.InstanceOf <Exception>()); Assert.IsFalse(msg.IsSettled); }