Esempio n. 1
0
        public async Task <List <Tour> > Search(SearchPattern searchPattern)
        {
            var request = new ToursRequest(Guid.NewGuid())
            {
                SearchPattern = searchPattern
            };

            // делаем так для того чтобы прервать ожидание, если все провайдеры ответили до истечения таймаута
            _providerNotResponded.TryAdd(request.RequestId, _messageBusClient.GetSubscriberCount <ToursRequest>());

            //отправляем поисковый запрос
            _messageBusClient.SendMessage(request);

            // ожидаем ответа от всех провайдеров, если ответили все до истечения таймаута ожидание будет отменено
            try
            {
                await Task.Delay(_options.Value.RequestTimeout, _delayTokenSource.Token);
            }
            catch (TaskCanceledException)
            {
            }

            List <Tour> result = new List <Tour>();

            _results.TryRemove(request.RequestId, out result);

            return(HandleResults(result, (ToursOrderEnum)searchPattern.ToursOrder));
        }
Esempio n. 2
0
        private async Task ReceiveRequest(ToursRequest request)
        {
            var tours = await _tourRepository.Search(SpecificationHelper.GetSpecification(request.SearchPattern));

            _messageBusClient.SendMessage(new ToursResponse(request.RequestId, nameof(OtherSearchService))
            {
                Data = tours.Select(t => new Tour(t.Id, t.Provider.Name, t.Hotel.Name, t.RoomType.Name,
                                                  t.DepartureCity.Name, t.Airline.Name, t.DepartureDate, t.ArrivalDate, t.HotelCheckInDate, t.HotelNightCount,
                                                  t.HotelNightPriceByPerson, t.PersonMaxCount)).ToList()
            });
        }
Esempio n. 3
0
 private void ReceiveRequest(ToursRequest request)
 {
     Assert.AreEqual(_requestId, request.RequestId);
 }