public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } ParameterInfo parameter = context.Parameter; var attribute = TypeUtility.GetResolvedAttribute <ServiceBusTriggerAttribute>(parameter); if (attribute == null) { return(Task.FromResult <ITriggerBinding>(null)); } string queueName = null; string topicName = null; string subscriptionName = null; string entityPath = null; EntityType entityType; if (attribute.QueueName != null) { queueName = Resolve(attribute.QueueName); entityPath = queueName; entityType = EntityType.Queue; } else { topicName = Resolve(attribute.TopicName); subscriptionName = Resolve(attribute.SubscriptionName); entityPath = EntityNameFormatter.FormatSubscriptionPath(topicName, subscriptionName); entityType = EntityType.Topic; } attribute.Connection = Resolve(attribute.Connection); ServiceBusAccount account = new ServiceBusAccount(_options, _configuration, attribute); Func <ListenerFactoryContext, bool, Task <IListener> > createListener = (factoryContext, singleDispatch) => { IListener listener = new ServiceBusListener(factoryContext.Descriptor.Id, entityType, entityPath, attribute.IsSessionsEnabled, factoryContext.Executor, _options, account, _messagingProvider, _loggerFactory, singleDispatch); return(Task.FromResult(listener)); }; #pragma warning disable 618 ITriggerBinding binding = BindingFactory.GetTriggerBinding(new ServiceBusTriggerBindingStrategy(), parameter, _converterManager, createListener); #pragma warning restore 618 return(Task.FromResult <ITriggerBinding>(binding)); }
public Task <ITriggerBinding> TryCreateAsync(TriggerBindingProviderContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } ParameterInfo parameter = context.Parameter; var attribute = TypeUtility.GetResolvedAttribute <ServiceBusTriggerAttribute>(parameter); if (attribute == null) { return(Task.FromResult <ITriggerBinding>(null)); } attribute.Connection = _nameResolver.ResolveWholeString(attribute.Connection); string entityPath; ServiceBusEntityType serviceBusEntityType; if (attribute.QueueName != null) { var queueName = _nameResolver.ResolveWholeString(attribute.QueueName); entityPath = queueName; serviceBusEntityType = ServiceBusEntityType.Queue; } else { var topicName = _nameResolver.ResolveWholeString(attribute.TopicName); var subscriptionName = _nameResolver.ResolveWholeString(attribute.SubscriptionName); entityPath = EntityNameFormatter.FormatSubscriptionPath(topicName, subscriptionName); serviceBusEntityType = ServiceBusEntityType.Topic; } Func <ListenerFactoryContext, bool, Task <IListener> > createListener = (factoryContext, singleDispatch) => { var autoCompleteMessagesOptionEvaluatedValue = GetAutoCompleteMessagesOptionToUse(attribute, factoryContext.Descriptor.ShortName); IListener listener = new ServiceBusListener(factoryContext.Descriptor.Id, serviceBusEntityType, entityPath, attribute.IsSessionsEnabled, autoCompleteMessagesOptionEvaluatedValue, factoryContext.Executor, _options, attribute.Connection, _messagingProvider, _loggerFactory, singleDispatch, _clientFactory, _concurrencyManager); return(Task.FromResult(listener)); }; #pragma warning disable 618 ITriggerBinding binding = BindingFactory.GetTriggerBinding(new ServiceBusTriggerBindingStrategy(), parameter, _converterManager, createListener); #pragma warning restore 618 return(Task.FromResult <ITriggerBinding>(binding)); }
public async Task DeadLetterMessages() { await using (var scope = await ServiceBusScope.CreateWithQueue(enablePartitioning: false, enableSession: false)) { await using var client = new ServiceBusClient(TestEnvironment.ServiceBusConnectionString); var messageCount = 10; ServiceBusSender sender = client.GetSender(scope.QueueName); using ServiceBusMessageBatch batch = await sender.CreateBatchAsync(); IEnumerable <ServiceBusMessage> messages = AddMessages(batch, messageCount).AsEnumerable <ServiceBusMessage>(); await sender.SendBatchAsync(batch); var receiver = client.GetReceiver(scope.QueueName); var receivedMessageCount = 0; var messageEnum = messages.GetEnumerator(); foreach (var item in await receiver.ReceiveBatchAsync(messageCount)) { receivedMessageCount++; messageEnum.MoveNext(); Assert.AreEqual(messageEnum.Current.MessageId, item.MessageId); await receiver.DeadLetterAsync(item); } Assert.AreEqual(messageCount, receivedMessageCount); var peekedMessage = receiver.PeekAsync(); Assert.IsNull(peekedMessage.Result); messageEnum.Reset(); receivedMessageCount = 0; string deadLetterQueuePath = EntityNameFormatter.FormatDeadLetterPath(scope.QueueName); var deadLetterReceiver = client.GetReceiver(deadLetterQueuePath); foreach (var item in await deadLetterReceiver.ReceiveBatchAsync(messageCount)) { receivedMessageCount++; messageEnum.MoveNext(); Assert.AreEqual(messageEnum.Current.MessageId, item.MessageId); await deadLetterReceiver.CompleteAsync(item); } Assert.AreEqual(messageCount, receivedMessageCount); var deadLetterMessage = deadLetterReceiver.PeekAsync(); Assert.IsNull(deadLetterMessage.Result); } }