using Microsoft.Extensions.Logging;
using RabbitMQ.Client;
using System.Text;
namespace QYZH.InteractiveMagazine.Infrastructure.MessageQueue;
///
/// RabbitMQ消息发布器
///
public class RabbitMQPublisher
{
private readonly IConnection _connection;
private readonly ILogger _logger;
///
/// 构造函数
///
/// RabbitMQ连接
/// 日志记录器
public RabbitMQPublisher(IConnection connection, ILogger logger)
{
_connection = connection;
_logger = logger;
}
///
/// 发布消息
///
/// 交换机名称
/// 路由键
/// 消息内容
public async Task PublishMessage(string exchange, string routingKey, string message)
{
await using var channel = await _connection.CreateChannelAsync();
var body = Encoding.UTF8.GetBytes(message);
await channel.BasicPublishAsync(
exchange: exchange,
routingKey: routingKey,
body: body
);
_logger.LogInformation("消息已发布 | 交换机: {Exchange} | 路由键: {RoutingKey} | 消息: {Message}",
exchange, routingKey, message);
}
}