public async Task PublishAsync <T>(T @event) where T : IntegrativeEvent { var channel = _channelPool.Get(); var exchange = typeof(T).GetEventExchange(); try { channel.BasicPublish( exchange: exchange, routingKey: "", basicProperties: null, body: @event.Serialize()); _logger.LogTrace("Event {Id} published on {Exchange}", @event.Id, exchange); await _storage.SaveAsync(@event, OperationType.Send, OperationStatus.Succeeded); } catch { _logger.LogError("Faild to publish event {Id} on {Exchange}", @event.Id, exchange); await _storage.SaveAsync(@event, OperationType.Send, OperationStatus.Failed); } _channelPool.Release(channel); }
public Task PublishAsync(IIntegrationEvent message) { var channel = _channelPool.Get(); var routingKey = message.GetType().Name; var body = JsonSerializer.SerializeToUtf8Bytes(message, message.GetType()); channel.ExchangeDeclare( exchange: ExchangeName, ExchangeType.Topic, durable: true, autoDelete: false); channel.BasicPublish( exchange: ExchangeName, routingKey: routingKey, basicProperties: null, body: body); _channelPool.Release(channel); return(Task.CompletedTask); }