/// <summary> /// Получить информацию о сообщениях, которые есть, но еще не отправлены указанному клиенту. /// </summary> /// <param name="clientId">Идентификатор клиента.</param> /// <param name="messageTypeId">Идентификатор типа сообщений.</param> /// <param name="tags">Теги, которые должно содержать сообщение.</param> /// <param name="maxCount">Максимальное количество возвращаемых записей. Если равно 0, возвращается информация о всех имеющихся сообщениях.</param> /// <returns>Информация о сообщениях. Записи отсортированы в планируемом порядке отправки.</returns> public IEnumerable <ServiceBusMessageInfo> GetMessagesInfo(string clientId, string messageTypeId, string[] tags, int maxCount = 0) { var queueName = _namingManager.GetClientQueueName(clientId, messageTypeId); IEnumerable <Queue> queues = _managementClient.GetQueuesAsync().Result; IEnumerable <Queue> clientQueues = queues.Where(x => x.Name.StartsWith(queueName)); List <ServiceBusMessageInfo> rmqMessagesInfo = new List <ServiceBusMessageInfo>(); foreach (Queue clientQueue in clientQueues) { var messages = _managementClient.GetMessagesFromQueueAsync(clientQueue, new GetMessagesCriteria(clientQueue.Messages, Ackmodes.ack_requeue_true)).Result; foreach (var message in messages) { var haveAllTags = true; foreach (string tag in tags) { var headerTag = message.Properties.Headers.Where(pr => pr.Key.StartsWith(_converter.GetTagPropertiesPrefix(tag))); if (headerTag.ToArray().Length == 0) { haveAllTags = false; break; } } if (haveAllTags) { ServiceBusMessageInfo msg = new ServiceBusMessageInfo { // TODO: Добавить заполнение других свойств. MessageTypeID = _namingManager.GetMessageType(message.RoutingKey), }; rmqMessagesInfo.Add(msg); } } if (maxCount > 0 && rmqMessagesInfo.Count >= maxCount) { rmqMessagesInfo = rmqMessagesInfo.Take(maxCount).ToList(); break; } } return(rmqMessagesInfo); }