# Lails.MQClient **Repository Path**: gitmy/Lails.MQClient ## Basic Information - **Project Name**: Lails.MQClient - **Description**: 兼容主流消息队列服务的客户端SDK,目前支持RabbitMQ,未来支持Redis、AliyunONS、MQTT等。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-06 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] ### 一、介绍 兼容主流消息队列服务的客户端SDK,目前支持RabbitMQ,未来支持Redis、AliyunONS、MQTT等。 * Git:https://gitee.com/xiaosonl/Lails.MQClient ### 二、安装 ```bash Install-Package Lails.MQClient ``` ### 三、说明 #### 1. Topic 消息以 **“Topic”** 的方式进行发布和订阅,Topic必须是一串由关键字用句号(.) 隔开组成的字符,如"gps.alarm","gps.alarm.key"等。 Topic支持使用通配符,“#”表示0个或若干个关键字,“*”表示一个关键字,如: * "gps.#":表示第一个关键字为“gps”的消息 * "gps.*.key":表示第一个关键字“gps”,第三个关键字为"key"的消息。 #### 2. ClientID 客户端名称,当多个订阅者使用同一名称时,表示以负载均衡的方式**群集订阅**;使用不同名称订阅时,表示各自订阅一份完整数据的**广播订阅**。 ### 四、示例 ~~~C# string consumername1 = "consumer1", consumername2 = "consumer1"; //独立订阅 //string consumername1 = "consumer", consumername2 = "consumer"; //共同订阅 MQClient consumer1 = new RabbitMQClient("mq.lails.cc", "root", "Lxs@rabbitmq", consumername1); MQClient consumer2 = new RabbitMQClient("mq.lails.cc", "root", "Lxs@rabbitmq", consumername2); consumer1.Connect(); consumer1.Subscribe("msg", data => { Console.WriteLine($"订阅1接收消息:{Encoding.UTF8.GetString(data)}"); consumer1.UnSubscribe("msg"); Console.WriteLine("退订consumer1"); return true; //ACK }); consumer2.Connect(); consumer2.Subscribe("msg", data => { Console.WriteLine($"订阅2接收消息:{Encoding.UTF8.GetString(data)}"); consumer1.UnSubscribe("msg"); Console.WriteLine("退订consumer1"); return true; //ACK }); MQClient publisher = new RabbitMQClient("mq.lails.cc", "root", "Lxs@rabbitmq", "publisher1"); publisher.Connect(); string message = "Rabbitmq Message"; byte[] body1 = Encoding.UTF8.GetBytes(message + "_01"); byte[] body2 = Encoding.UTF8.GetBytes(message + "_02"); publisher.Publish("msg", body1); publisher.Publish("msg", body2); Console.WriteLine($"发送消息:{message}"); Console.Read(); ~~~ ### 五、兼容性设计 #### 1. Kafka ##### 差异性: * 不支持“#”号通配符; * 支持以“|”号订阅多个Topic,如“(topic1) | (topic2)” ##### 参考: > https://stackoverflow.com/questions/39520222/how-to-subscribe-to-a-list-of-multiple-kafka-wildcard-patterns-using-kafka-pytho #### 2. 兼容Redis #### 3. MQTT #### 4. 阿里云MQ --- ### 更新日志: ### V0.2.3.0 1. 订阅时,Topic的单层通配符由' '改为'*'; ### V0.3.0.0 1. Framework版本降低到4.5 ### V0.3.1.0 1. 新增Subscribe方法重载: ```csharp (string topic, Func subscribe, MessageArgs arg = null) # MessageData public class MessageData { public byte[] Data { get; set; } public string Topic { get; set; } } ``` 支持返回接收消息的主题 ### V0.4.0.0 1. 拆分项目为Lails.MQClient.Core和Lails.MQClient.RabbitMQ,将不同MQ实现分离; ### V0.4.0.1 1. RabbitMQClient构造函数中,支持IP:PORT拆分逻辑片; 2. 添加 RabbitMQ.Client v5.1.0 依赖库 Microsoft.Diagnostics.Tracing.EventSource