using Dpz.Core.Entity.Base;

namespace Dpz.Core.MessageQueue.Abstractions;

/// <summary>
/// 消息发布者接口
/// </summary>
/// <typeparam name="TMessage">消息类型</typeparam>
public interface IMessagePublisher<in TMessage>
    where TMessage : MessageBase
{
    /// <summary>
    /// 发布单条消息
    /// </summary>
    /// <param name="message">消息内容</param>
    /// <param name="routingKey">路由键(可选,不指定则使用约定规则)</param>
    /// <param name="cancellationToken">取消令牌</param>
    Task PublishAsync(
        TMessage message,
        string? routingKey = null,
        CancellationToken cancellationToken = default
    );

    /// <summary>
    /// 批量发布消息
    /// </summary>
    /// <param name="messages">消息列表</param>
    /// <param name="routingKey">路由键(可选,不指定则使用约定规则)</param>
    /// <param name="cancellationToken">取消令牌</param>
    Task PublishBatchAsync(
        IEnumerable<TMessage> messages,
        string? routingKey = null,
        CancellationToken cancellationToken = default
    );
}
评论加载中...