private DomainEvent ToDomainEvent(OutboxEvent outboxEvent) { var eventType = Type.GetType(outboxEvent.EventName); var domainEvent = JsonSerializer.Deserialize(outboxEvent.Payload, eventType); return((DomainEvent)domainEvent); }
public IEvent FromOutboxEvent(OutboxEvent @event) { var assembly = Assembly.GetAssembly(typeof(IEvent)); var eventType = assembly.GetTypes() .FirstOrDefault(x => x.Name == @event.EventType) ?? throw new ArgumentNullException(nameof(@event.EventType), $"Cannot find EventType for event with Id: {@event.Id}."); return((IEvent)eventType.GetMethod("CreateFromMessage")?.Invoke(null, new object [] { @event.Id, @event.CreatedDate, @event.Message })); }
public async Task <ActionResult> PostProductSagaChoreography(ProductRequestDto productRequestDto) { var @event = new ProductCreated { Guid = Guid.NewGuid(), Id = 5, Name = "Twarożek" }; var product = _mapper.Map <Product>(productRequestDto); _context.Products.Add(product); var data = JsonSerializer.Serialize(product); var productEvent = new OutboxEvent(data, "ProductCreated"); _context.OutboxEvents.Add(productEvent); await _context.SaveChangesAsync(); return(Ok()); }
public async Task <Unit> Handle(ProductCreated productCreated, CancellationToken cancellationToken) { _logger.LogInformation($"---- Received {nameof(ProductCreated)} message: Product.Guid = [{productCreated.Guid}] ----"); try { if (productCreated.Name.EndsWith('1')) { _logger.LogError($"---- PRODUCT ENDS WITH '1' !!! THAT IS NOT VALID: Product.Guid = [{productCreated.Guid}] ----"); throw new System.Exception($"PRODUCT ENDS WITH '1' !!! THAT IS NOT VALID: Product.Guid = [{productCreated.Guid}]"); } using (var scope = _serviceScopeFactory.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <ShippingContext>(); var product = _mapper.Map <Product>(productCreated); context.Products.Add(product); await context.SaveChangesAsync(); } _logger.LogInformation($"---- Saved {nameof(ProductCreated)} message: Product.Guid = [{productCreated.Guid}] ----"); } catch (System.Exception ex) { _logger.LogError($"Exception :( Guid = [{productCreated.Guid}]"); using (var scope = _serviceScopeFactory.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <ShippingContext>(); var productRejected = new ProductRejected { Guid = productCreated.Guid }; var data = JsonSerializer.Serialize(productRejected); var productEvent = new OutboxEvent(data, "ProductRejected"); context.OutboxEvents.Add(productEvent); await context.SaveChangesAsync(); } } return(await Task.FromResult(Unit.Value)); }
public async Task Add(EventMessage eventMessage) => await _eventDataWriter.Add(OutboxEvent.FromEventMessage(eventMessage));
public void Remove(OutboxEvent outboxEvent) { _context.Remove(outboxEvent); _context.SaveChanges(); }
public async Task Add(OutboxEvent outboxEvent) => await _context.Events.AddAsync(outboxEvent);
public async Task PublishAsync(OutboxEvent @event) { await _bus.Publish(@event.GetEvent(), @event.Metadata); }