rabbitmq abstracted from application
This commit is contained in:
@@ -2,6 +2,8 @@ using System.Text;
|
||||
using System.Text.Json;
|
||||
using AipsCore.Application.Abstract;
|
||||
using AipsCore.Application.Abstract.MessageBroking;
|
||||
using AipsCore.Infrastructure.DI.Configuration;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using RabbitMQ.Client;
|
||||
|
||||
namespace AipsCore.Infrastructure.MessageBroking.RabbitMQ;
|
||||
@@ -9,20 +11,26 @@ namespace AipsCore.Infrastructure.MessageBroking.RabbitMQ;
|
||||
public class RabbitMqPublisher : IMessagePublisher
|
||||
{
|
||||
private readonly IRabbitMqConnection _connection;
|
||||
private readonly IConfiguration _configuration;
|
||||
|
||||
public RabbitMqPublisher(IRabbitMqConnection connection)
|
||||
public RabbitMqPublisher(IRabbitMqConnection connection, IConfiguration configuration)
|
||||
{
|
||||
_connection = connection;
|
||||
_configuration = configuration;
|
||||
}
|
||||
|
||||
public async Task PublishAsync<T>(string exchange, string routeKey, T message, CancellationToken cancellationToken = default)
|
||||
public async Task PublishAsync<T>(T message, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var channel = await _connection.CreateChannelAsync(cancellationToken);
|
||||
|
||||
await channel.ExchangeDeclareAsync(exchange, ExchangeType.Topic, durable: true, cancellationToken: cancellationToken);
|
||||
await channel.ExchangeDeclareAsync(GetExchange(), ExchangeType.Topic, durable: true, cancellationToken: cancellationToken);
|
||||
|
||||
var bytes = Serialize(message);
|
||||
await channel.BasicPublishAsync(exchange, routeKey, bytes, cancellationToken);
|
||||
await channel.BasicPublishAsync(
|
||||
GetExchange(),
|
||||
typeof(T).Name,
|
||||
bytes,
|
||||
cancellationToken);
|
||||
|
||||
await channel.CloseAsync(cancellationToken);
|
||||
}
|
||||
@@ -31,4 +39,6 @@ public class RabbitMqPublisher : IMessagePublisher
|
||||
{
|
||||
return JsonSerializer.SerializeToUtf8Bytes(message);
|
||||
}
|
||||
|
||||
private string GetExchange() => _configuration.GetEnvRabbitMqExchange();
|
||||
}
|
||||
Reference in New Issue
Block a user