48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
|
|
using Microsoft.Extensions.Logging;
|
||
|
|
using RabbitMQ.Client;
|
||
|
|
using System.Text;
|
||
|
|
|
||
|
|
namespace QYZH.InteractiveMagazine.Infrastructure.MessageQueue;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// RabbitMQ消息发布器
|
||
|
|
/// </summary>
|
||
|
|
public class RabbitMQPublisher
|
||
|
|
{
|
||
|
|
private readonly IConnection _connection;
|
||
|
|
private readonly ILogger<RabbitMQPublisher> _logger;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 构造函数
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="connection">RabbitMQ连接</param>
|
||
|
|
/// <param name="logger">日志记录器</param>
|
||
|
|
public RabbitMQPublisher(IConnection connection, ILogger<RabbitMQPublisher> logger)
|
||
|
|
{
|
||
|
|
_connection = connection;
|
||
|
|
_logger = logger;
|
||
|
|
}
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 发布消息
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="exchange">交换机名称</param>
|
||
|
|
/// <param name="routingKey">路由键</param>
|
||
|
|
/// <param name="message">消息内容</param>
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
}
|