public void returns_expected_message_format() { var e = new DomainEventEnvelope { AggregateId = "A1", EventId = Guid.Empty, CorrelationId = "987F693E-EF45-4518-8AFB-105B209887B1", Type = "foo-type", Data = "{\"Foo\":\"bar\"}" }; var result = MessagingHelper.CreateMessageFrom(e); var expected = @" { ""version"": ""1"", ""eventName"": ""foo-type"", ""x-correlationId"": ""987F693E-EF45-4518-8AFB-105B209887B1"", ""x-sender"": ""CapabilityService.WebApi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"", ""payload"": {""foo"":""bar""} }"; Assert.Equal( expected: expected.Replace(" ", "").Replace("\n", "").Replace("\r", ""), actual: result.Replace(" ", "").Replace("\n", "").Replace("\r", "") ); }
private async Task DoWork(CancellationToken stoppingToken) { using (var scope = _serviceProvider.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService <CapabilityServiceDbContext>(); var domainEventsToPublish = await dbContext .DomainEvents .Where(x => x.Sent == null) .ToListAsync(stoppingToken); if (domainEventsToPublish.Any() == false) { return; } Log.Information($"Domain events to publish: {domainEventsToPublish.Count}"); var publisherFactory = scope.ServiceProvider.GetRequiredService <KafkaPublisherFactory>(); var eventRegistry = scope.ServiceProvider.GetRequiredService <IDomainEventRegistry>(); Log.Information("Connecting to kafka..."); using (var producer = publisherFactory.Create()) { Log.Information("Connected!"); foreach (var evt in domainEventsToPublish) { var topicName = eventRegistry.GetTopicFor(evt.Type); var message = MessagingHelper.CreateMessageFrom(evt); try { var result = await producer.ProduceAsync( topic : topicName, message : new Message <string, string> { Key = evt.AggregateId, Value = message } ); evt.Sent = result.Timestamp.UtcDateTime; await dbContext.SaveChangesAsync(); Log.Information($"Domain event \"{evt.Type}>{evt.EventId}\" has been published!"); } catch (Exception) { throw new Exception($"Could not publish domain event \"{evt.Type}>{evt.EventId}\"!!!"); } } } } }
public void returns_expected_message_format() { var e = new DomainEventEnvelope { AggregateId = "A1", EventId = Guid.Empty, Type = "foo-type", Data = "{\"Foo\":\"bar\"}" }; var result = MessagingHelper.CreateMessageFrom(e); var expected = @" { ""messageId"": ""00000000-0000-0000-0000-000000000000"", ""type"": ""foo-type"", ""data"": {""foo"":""bar""} }"; Assert.Equal( expected: expected.Replace(" ", "").Replace("\n", "").Replace("\r", ""), actual: result.Replace(" ", "").Replace("\n", "").Replace("\r", "") ); }