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);
                });
            }
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 public virtual Task OnMessage(EventBusMessage message, string[] exceptionMessageStackForFailSubscription = null)
 {
     return(_onMessage(new EventBusSubscriptionContext(this, exceptionMessageStackForFailSubscription), message));
 }
Esempio n. 5
0
 public async Task AddToDbContext(EventBusMessage message, CancellationToken cancellationToken = default(CancellationToken))
 {
     await _dbContext.AddAsync(new EventLog(message));
 }