public void Publish(Type messageType, EventBusMessage message) { _eventBusConnection.EnsureConnection(); var eventName = _manager.GetEventName(messageType); _logger.LogTrace($"Creating RabbitMQ channel to publish event: {message.MessageId} ({eventName})"); using (var channel = _eventBusConnection.CreateModel()) { _logger.LogTrace($"Declaring RabbitMQ exchange to publish event: {message.MessageId}"); var messageJson = JsonConvert.SerializeObject(message); var body = Encoding.UTF8.GetBytes(messageJson); createRetryPolicy(eventName, message.MessageId).Execute(() => { var properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; // persistent _logger.LogTrace($"Publishing event to RabbitMQ: {message.MessageId}"); channel.BasicPublish( exchange: _exchangeName, eventName, mandatory: true, basicProperties: properties, body: body); }); } }
public EventLog(EventBusMessage message) { AssemblyName = message.GetType().Assembly.GetName().Name; TypeName = message.GetType().FullName; var json = JsonConvert.SerializeObject(message); Content = Encoding.UTF8.GetBytes(json); DateTimeCreation = DateTime.Now; }
public async Task SaveEventLogAsync(EventBusMessage message, IDbContextTransaction transaction, CancellationToken cancellationToken = default(CancellationToken)) { if (_eventSourcingDbContext.Database.CurrentTransaction == null || _eventSourcingDbContext.Database.CurrentTransaction.GetDbTransaction() != transaction.GetDbTransaction()) { _eventSourcingDbContext.Database.UseTransaction(transaction.GetDbTransaction()); } _eventSourcingDbContext.EventLogs.Add(new EventLog(message)); await _eventSourcingDbContext.SaveChangesAsync(cancellationToken); }
public virtual Task OnMessage(EventBusMessage message, string[] exceptionMessageStackForFailSubscription = null) { return(_onMessage(new EventBusSubscriptionContext(this, exceptionMessageStackForFailSubscription), message)); }
public async Task AddToDbContext(EventBusMessage message, CancellationToken cancellationToken = default(CancellationToken)) { await _dbContext.AddAsync(new EventLog(message)); }