# DemoRabbitMQ **Repository Path**: leafCore/demo-rabbit-mq ## Basic Information - **Project Name**: DemoRabbitMQ - **Description**: 基于RabbitMQ.Client 7.2.0的封装和使用demo - **Primary Language**: C# - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-04 - **Last Updated**: 2025-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Net8RabbitMQ 解决方案 基于 .NET 8.0 的 RabbitMQ 学习和演示解决方案,包含两个主要项目: - **Net8RabbitMQ**:ASP.NET Core 8.0 Web 应用示例 - **Net8RabbitMQDemo**:RabbitMQ 多种通信模式的演示实现 ## 解决方案结构 ``` Net8RabbitMQ/ ├── Net8RabbitMQ/ # ASP.NET Core 8.0 Web 应用 │ ├── Controllers/ # API 控制器 │ ├── Properties/ # 项目属性 │ ├── obj/ # 编译输出目录 │ ├── Net8RabbitMQ.csproj # 项目文件 │ ├── Program.cs # 应用入口 │ ├── WeatherForecast.cs # 示例模型 │ └── appsettings.json # 配置文件 ├── Net8RabbitMQDemo/ # RabbitMQ 演示项目 │ ├── Consumer/ # 消费者实现 │ │ ├── PublishAndSubscribeConsumer.cs # 发布/订阅模式消费者 │ │ ├── RabbitMqConsumer.cs # 基础消费者 │ │ ├── RoutingAndTopicsConsumer.cs # 路由和主题模式消费者 │ │ └── WorkQueuesAndSimpleQueueConsumer.cs # 简单队列和工作队列消费者 │ ├── obj/ # 编译输出目录 │ ├── DemoPublishAndSubscribe.cs # 发布/订阅模式演示 │ ├── DemoRPC.cs # RPC 模式演示 │ ├── DemoRouting.cs # 路由模式演示 │ ├── DemoSimpleWorkQueueAndWorkQueues.cs # 简单队列和工作队列演示 │ ├── DemoTopics.cs # 主题模式演示 │ ├── IRabbitMqClient.cs # RabbitMQ 客户端接口 │ ├── Net8RabbitMQDemo.csproj # 项目文件 │ ├── RabbitMqClient.cs # RabbitMQ 客户端实现 │ ├── RabbitMqExtensions.cs # 扩展方法 │ └── RabbitMqOptions.cs # RabbitMQ 配置选项 └── Net8RabbitMQ.sln # 解决方案文件 ``` ## Net8RabbitMQDemo 项目详解 ### 1. 项目概述 Net8RabbitMQDemo 是一个基于 .NET 8.0 的 RabbitMQ 演示项目,展示了多种 RabbitMQ 通信模式的实现,包括: - 简单队列 (Simple Queue) - 工作队列 (Work Queues) - 发布/订阅模式 (Publish/Subscribe) - 路由模式 (Routing) - 主题模式 (Topics) - RPC 远程调用模式 ### 2. 核心功能 #### 2.1 统一的客户端接口 `IRabbitMqClient` 接口提供了统一的消息发布、订阅和 RPC 调用方法,简化了不同模式下的 RabbitMQ 操作: ```csharp public interface IRabbitMqClient { // 通用发布消息 Task PublishAsync(string exchange, string routingKey, T message); // 通用订阅消息 Task SubscribeAsync(string queue, Func handler, string exchange = "", string routingKey = "", string exchangeType = "direct"); // RPC 远程调用 Task RpcCallAsync(string queue, TRequest request); } ``` #### 2.2 多种通信模式实现 ##### 2.2.1 简单队列和工作队列 - **简单队列**:基本的点对点消息传递,适用于单一生产者和单一消费者场景 - **工作队列**:多个消费者竞争消费消息,实现任务分发和负载均衡 ```csharp // 生产者 await _client.PublishAsync(exchange: "", routingKey: "task_queue", message: new MyMsg { Text = "Hello" }); // 消费者 await _client.SubscribeAsync("task_queue", async msg => { Console.WriteLine($"处理: {msg.Text}