public async Task <(bool Ok, string Message)> IsHealthOk(string queueName) { try { // Only way to check if connection string is correct is try receiving a message, // which isn't possible for topics as don't have a subscription AzureCore.IMessageReceiver receiver = _messageReceiverFactory.Receiver(queueName); IList <Message> message = await receiver.PeekAsync(1); await receiver.CloseAsync(); return(await Task.FromResult((true, string.Empty))); } catch (ServiceBusCommunicationException ex) { return(false, ex.Message); } }
protected async override Task ReceiveMessages <T>(string entityPath, Predicate <T> predicate, TimeSpan timeout) { List <T> messages = new List <T>(); CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); AzureCore.IMessageReceiver receiver = _messageReceiverFactory.Receiver(entityPath); _ = Task.Run(() => { if (!cancellationTokenSource.Token.WaitHandle.WaitOne(timeout)) { _messageReceiverFactory.TimedOut(); cancellationTokenSource.Cancel(); } }); try { while (true) { Message message = await receiver.ReceiveAsync(TimeSpan.FromSeconds(5)); try { if (message != null) { await receiver.CompleteAsync(message.SystemProperties.LockToken); string json = null; using (MemoryStream inputStream = new MemoryStream(message.Body)) { using (StreamReader streamReader = new StreamReader(inputStream)) { json = streamReader.ReadToEnd(); } } T messageOfType = JsonConvert.DeserializeObject <T>(json); if (predicate(messageOfType)) { break; } } } catch (JsonSerializationException) { // don't do anything the serialization failed as this is not a message we are interested in } if (cancellationTokenSource.Token.IsCancellationRequested) { break; } } } finally { // cancel timeout cancellationTokenSource.Cancel(); await receiver.CloseAsync(); } }