public async Task <IActionResult> Produce([FromBody] string message) { await _producer.Produce(new TestProduceMessage { CreatedAt = DateTime.Now, Body = message }); return(Ok()); }
private async Task ReplicateDataToTopics() { _logger.LogInfo("Started replication of clusters"); var prices = _prices.AsQueryable(); foreach (var price in prices.ToEnumerable()) { await _messageProducer.Produce(price.Id.ToString(), price); } _logger.LogInfo("Replication finished"); }
/// <summary> /// Calls the Produce() method in loop for high throughput scenarios /// </summary> /// <param name="producer"></param> /// <param name="items">All messages to produce</param> /// <param name="throwIfAnyProduceFail">indicates if the method should throw a <see cref="BatchProduceException"/> if any message fail</param> /// <returns>A Task that will be marked as completed when all produce operations end</returns> public static Task <IReadOnlyCollection <BatchProduceItem> > BatchProduceAsync( this IMessageProducer producer, IReadOnlyCollection <BatchProduceItem> items, bool throwIfAnyProduceFail = true) { var completionSource = new TaskCompletionSource <IReadOnlyCollection <BatchProduceItem> >(); var pendingProduceCount = items.Count; var hasErrors = false; if (pendingProduceCount == 0) { completionSource.SetResult(items); } foreach (var item in items) { producer.Produce( item.Topic, item.PartitionKey, item.Message, item.Headers, report => { item.DeliveryReport = report; if (report.Error.IsError) { hasErrors = true; } if (Interlocked.Decrement(ref pendingProduceCount) != 0) { return; } if (throwIfAnyProduceFail && hasErrors) { completionSource.SetException(new BatchProduceException(items)); } else { completionSource.SetResult(items); } }); } return(completionSource.Task); }
public CreateMemberResponse CreateMember(CreateMemberRequest request) { _validator.ValidateRequest(request); var member = Member.New(); member.SetMemberInformation(request.Name, request.Surname, request.Email); _memberManager.Save(member); _messageProducer.Produce("member-event", member.ID.ToString()); return(new CreateMemberResponse() { MemberId = member.ID, Name = member.Name, Surname = member.Surname, Email = member.Email }); }
protected override async Task ProcessRecord(string key, Product value) { value.Rating = value.Rating.Unify(); value.Reviews = value.Reviews.Select(r => new Review() { Liked = r.Liked, Disliked = r.Disliked, Text = r.Text, Note = r.Note.Unify() }); value.Properties = value.Properties.ToDictionary(p => p.Key.Replace('.', '_'), p => p.Value); await _productsRepository.Upsert(value); await _clusterizationProducer.Produce(value); }
async static Task ProcessPage(IBrowsingContext context, string category, string url) { try { IRatingParser ratingParser = new CitilinkRatingParser(); IProductParser productParser = new CitilinkProductParser(); Product product = new Product(); product.Url = url; using (var document = await context.OpenAsync(url)) { product.ProductType = category; product.Name = productParser.ParseName(document); product.Rating = ratingParser.Parse(document); product.Price = productParser.ParsePrice(document); product.Properties = productParser.ParseProperties(document); } product.Reviews = await ProcessReviews(context, $"{url}/otzyvy/", ratingParser); Console.WriteLine($"Product {product.Name} has been parsed"); await s_producer.Produce(product.Name, product); // To Prevent being blocked await Task.Delay(s_random.Next(30000, 45000)); } catch (NullReferenceException ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex); Console.ForegroundColor = ConsoleColor.White; // we got captcha wait an hour await Task.Delay(4000000); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex); Console.ForegroundColor = ConsoleColor.White; } }
static async Task GenerateProduct(Random r, string category, string url, int i) { Product product = new Product(); product.Url = $"{url}{i}"; product.ProductType = category; product.Name = $"{category} v{i}"; product.Rating = new Rating(r.Next(11), 10); product.Price = new Price() { Currency = "BLR", Value = r.Next(200, 4000) }; product.Properties = new Dictionary <string, string>() { { "tp1", "test property we've just created" } }; product.Reviews = ProcessReviews(r); await s_producer.Produce(product.Name, product); }
protected void Register(IMessageConsumer consumer, IMessageProducer producer) { consumer.Consume(producer.Produce()); _store.Add(consumer, producer); }
public override async Task Handle(ProductUpdatedIntegrationEvent notification, CancellationToken cancellationToken) { await _messageProducer.Produce(notification); _logger.LogInformation($"O Produto {notification.Name} de id = {notification.Id} foi atualizado e enviado para a api de products"); }
public override async Task Handle(OrderCreatedIntegrationEvent notification, CancellationToken cancellationToken) { await _messageProducer.Produce(notification); _logger.LogInformation($"Pedido de confirmação de estoque enviado para a ordem {notification.OrderId}"); }
public override async Task Handle(OrderRollbackIntegrationEvent notification, CancellationToken cancellationToken) { await _messageProducer.Produce(notification); _logger.LogInformation($"Mensagem de rollback enviada para a api de prodtos, ordem = {notification.OrderId}"); }
public async Task <IActionResult> CheckoutBasket([FromBody] BasketCheckout basketCheckout) { try { var entity = await _dbContext .Baskets .Include(basket => basket.BasketLines) .Where(basket => basket.Id == basketCheckout.BasketId) .FirstOrDefaultAsync() ; if (entity == null) { return(BadRequest()); // not NotFound() } //var userId = HttpContext.Request.Headers["CurrentUser"].FirstOrDefault(); // basketCheckout.UserId; var userId = User.GetClaimOrDefault <string>("sub"); if (!userId.IsValidDbStringId()) { return(BadRequest("No Valid 'CurrentUser' Header exists")); } var basketCheckoutMessage = BasketCheckoutMessageMapper.From(basketCheckout, userId); basketCheckoutMessage .BasketLines .AddRange(entity .BasketLines .Select(line => new BasketLineMessage() { Price = line.Price, TicketAmount = line.TicketAmount, BasketLineId = line.Id, } ) ); int totalPrice = basketCheckoutMessage .BasketLines .Sum(lineMessage => lineMessage.Price * lineMessage.TicketAmount ); // Discount서버를 통해 할인 적용. var coupon = userId.IsValidDbStringId() ? await _discountService.GetCouponAsync(userId) : null; var couponAmount = coupon?.Amount ?? 0; // 지불금액 basketCheckoutMessage.BasketTotal = totalPrice - couponAmount; // 다른 서비스(~= Order Service) 에 Checkout 되었음을 통지. await _producer.Produce(basketCheckoutMessage); // 처리된 Basket 을 삭제. var basketsToRemove = _dbContext.Baskets.Where(basket => basket.Id == basketCheckout.BasketId); _dbContext.Baskets.RemoveRange(basketsToRemove); await _dbContext.SaveChangesAsync(); return(Ok(basketCheckoutMessage)); } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e.StackTrace)); } }
public override async Task Handle(StockConfirmationIntegrationEvent notification, CancellationToken cancellationToken) { await _producer.Produce(notification); _logger.LogInformation($"Confirmação de estoque Bem sucedida enviada para a ordem {notification.OrderId}"); }
public override async Task Handle(StockUpdateIntegrationEvent notification, CancellationToken cancellationToken) { await _producer.Produce(notification); _logger.LogInformation($"Atualização de estoque enviada para a manger deviado a execução da ordem {notification.OrderId}"); }
public override async Task Handle(ProductRollbackIntegrationEvent notification, CancellationToken cancellationToken) { await _producer.Produce(notification); _logger.LogInformation("Rollback de estoque de produtos devido a erro na ordem enviado para a manager"); }