namespace Dpz.Core.MessageQueue.Enums;
/// <summary>
/// RabbitMQ Exchange 类型枚举
/// </summary>
public enum ExchangeType
{
/// <summary>
/// 直接路由:精确匹配路由键
/// 用途:点对点消息传递,如订单系统中特定用户的通知
/// 示例:routing key "order.created" 只发送到绑定了 "order.created" 的队列
/// </summary>
Direct,
/// <summary>
/// 主题路由:支持通配符匹配路由键
/// 用途:发布/订阅模式,支持灵活的消息分类
/// 通配符:
/// * (星号) - 匹配一个单词,如 "order.*.created" 匹配 "order.user.created"
/// # (井号) - 匹配零个或多个单词,如 "order.#" 匹配 "order.user.created.success"
/// 示例:
/// routing key "news.tech.ai"
/// 可被 "news.tech.*" 或 "news.#" 的队列接收
/// </summary>
Topic,
/// <summary>
/// 广播路由:忽略路由键,发送到所有绑定的队列
/// 用途:消息广播,如系统配置更新、缓存清除通知
/// 示例:一条消息发送到所有订阅的微服务实例
/// 性能:最快的路由方式,无需匹配路由键
/// </summary>
Fanout,
/// <summary>
/// 头部路由:根据消息头(Headers)属性匹配,忽略路由键
/// 用途:复杂的路由规则,如根据消息优先级、来源、类型等多个维度路由
/// 匹配模式:
/// x-match: all - 所有头部属性都匹配(AND)
/// x-match: any - 任一头部属性匹配(OR)
/// 示例:根据 {"priority": "high", "type": "alert"} 路由消息
/// 性能:匹配速度慢于其他类型,较少使用
/// </summary>
Headers,
}
/// <summary>
/// Exchange 类型扩展方法
/// </summary>
public static class ExchangeTypeExtensions
{
/// <summary>
/// 转换为 RabbitMQ 的字符串表示
/// </summary>
public static string ToRabbitMQString(this ExchangeType exchangeType)
{
return exchangeType switch
{
ExchangeType.Direct => "direct",
ExchangeType.Topic => "topic",
ExchangeType.Fanout => "fanout",
ExchangeType.Headers => "headers",
_ => throw new ArgumentOutOfRangeException(nameof(exchangeType), exchangeType, null),
};
}
/// <summary>
/// 从字符串解析为枚举
/// </summary>
public static ExchangeType FromString(string exchangeType)
{
return exchangeType.ToLowerInvariant() switch
{
"direct" => ExchangeType.Direct,
"topic" => ExchangeType.Topic,
"fanout" => ExchangeType.Fanout,
"headers" => ExchangeType.Headers,
_ => throw new ArgumentException(
$"未知的 Exchange 类型: {exchangeType}",
nameof(exchangeType)
),
};
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这是一个定义 RabbitMQ Exchange 类型的 C# 代码文件,主要包含一个枚举类型和相应的扩展方法。让我详细解释一下:
代码结构分析
1. 命名空间
namespace Dpz.Core.MessageQueue.Enums;
属于 Dpz.Core.MessageQueue.Enums 命名空间,表明这是一个消息队列核心库中的枚举定义。
2. ExchangeType 枚举
这个枚举定义了 RabbitMQ 中四种主要的 Exchange 类型:
Direct(直接路由)
- 工作原理:精确匹配路由键
- 使用场景:点对点消息传递
- 示例:订单系统中发送给特定用户的通知
- 路由规则:routing key 必须完全匹配
Topic(主题路由)
- 工作原理:支持通配符匹配
- 通配符规则:
*:匹配一个单词#:匹配零个或多个单词
- 使用场景:发布/订阅模式,灵活的消息分类
- 示例:新闻系统按类别分发
Fanout(广播路由)
- 工作原理:忽略路由键,广播到所有绑定队列
- 使用场景:系统广播,如配置更新、缓存清除
- 性能特点:最快的路由方式
Headers(头部路由)
- 工作原理:根据消息头属性匹配
- 匹配模式:
x-match: all:所有属性匹配(AND 逻辑)x-match: any:任一属性匹配(OR 逻辑)
- 使用场景:复杂路由规则
- 性能特点:匹配速度较慢
3. ExchangeTypeExtensions 扩展类
提供了两个实用的扩展方法:
ToRabbitMQString() 方法
public static string ToRabbitMQString(this ExchangeType exchangeType)
- 功能:将枚举值转换为 RabbitMQ 识别的字符串格式
- 实现:使用 switch 表达式进行映射
- 返回值:对应的小写字符串("direct", "topic", "fanout", "headers")
FromString() 方法
public static ExchangeType FromString(string exchangeType)
- 功能:从字符串解析回枚举值
- 特点:不区分大小写(使用
ToLowerInvariant()) - 异常处理:未知类型时抛出
ArgumentException
代码特点
- 详细的文档注释:每个枚举值都有完整的用途说明和示例
- 类型安全:使用枚举避免字符串硬编码
- 扩展性好:通过扩展方法提供转换功能
- 异常处理:对无效输入进行适当的异常处理
- 性能考虑:使用 switch 表达式提高性能
这个设计很好地封装了 RabbitMQ Exchange 类型的概念,为开发者提供了类型安全且易于使用的 API。
评论加载中...