using Dpz.Core.Entity.Base;
using Dpz.Core.MessageQueue.Models;

namespace Dpz.Core.MessageQueue.Abstractions;

/// <summary>
/// 消息处理器接口
/// 实现此接口来定义如何处理特定类型的消息
/// </summary>
/// <typeparam name="TMessage">消息类型</typeparam>
public interface IMessageHandler<in TMessage>
    where TMessage : MessageBase
{
    /// <summary>
    /// 处理消息
    /// </summary>
    /// <param name="message">消息内容</param>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns>处理成功返回true,失败返回false(将触发重试)</returns>
    Task<bool> HandleAsync(TMessage message, CancellationToken cancellationToken = default);
}

/// <summary>
/// 消息处理器接口
/// 实现此接口来定义如何处理特定类型的消息
/// </summary>
/// <typeparam name="TMessage">消息类型</typeparam>
/// <typeparam name="TResult"></typeparam>
public interface IMessageHandler<in TMessage, TResult>
    where TMessage : MessageBase
    where TResult : MessageHandlerResult
{
    /// <summary>
    /// 处理消息
    /// </summary>
    /// <param name="message">消息内容</param>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns>处理结果</returns>
    Task<TResult> HandleAsync(TMessage message, CancellationToken cancellationToken = default);
}
评论加载中...