NetMQ 中间件(ZeroMQ)
包名: Snet.NetMQ | 类: NetMQOperate | 基类: MqAbstract<NetMQOperate, NetMQData.Basics>
使用 ZeroMQ(NetMQ -- ZeroMQ 的原生 .NET 移植版本)提供轻量级、高性能的消息传递。支持发布/订阅消息模式,无需代理服务器。
概述
NetMQOperate 封装了 NetMQ 套接字,用于无代理的高速消息传递。它继承自 MqAbstract<NetMQOperate, NetMQData.Basics> 并实现了 IMq,在所有 Snet 中间件中提供一致的生产者/消费者语义。
ZeroMQ 适用于低延迟要求较高的场景,在这些场景中代理会带来不必要的额外开销。
安装
dotnet add package Snet.NetMQ
快速开始
using Snet.NetMQ;
var mq = new NetMQOperate(new NetMQData.Basics
{
Address = "tcp://127.0.0.1:8866"
});
await mq.OnAsync();
// 绑定事件再消费
mq.OnDataEventAsync += async (sender, e) =>
{
if (e.Status)
Console.WriteLine($"接收到数据: {e.ResultData}");
else
Console.WriteLine($"消费失败: {e.Message}");
};
await mq.ConsumeAsync("temperature");
// 生产消息(可选)
await mq.ProduceAsync("temperature", "25.4", System.Text.Encoding.UTF8);
// 后续:取消消费
// await mq.UnConsumeAsync("temperature");
// await mq.DisposeAsync();
配置
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
SN |
string | — | 序列号 / 设备标识符 |
Address |
string | "tcp://127.0.0.1:8866" |
套接字地址(如 tcp://127.0.0.1:8866) |
UModel |
enum | PubModel | 使用模式:SubModel, PubModel |
TimeOut |
int | 1000 | 操作超时(毫秒) |
ResponseType |
enum | Content | 响应类型 |
支持的模式
NetMQ 支持 2 种模式:PubModel, SubModel。
| 模式 | 描述 |
|---|---|
| PubModel | 发布者模式 -- 一对多消息扇出到所有连接的订阅者 |
| SubModel | 订阅者模式 -- 接收来自发布者的匹配主题前缀过滤器的消息 |
架构
ZeroMQ 无需中央代理即可运行。发布者和订阅者直接通信,具有以下特点:
- 超低延迟:无代理中转,直接套接字到套接字的消息传递
- 零基础设施:无需安装、配置或维护服务器
- 自动重连:透明地处理网络中断
支持的操作
| 操作 | 方法 | 描述 |
|---|---|---|
| 连接 / 绑定 | OnAsync() |
绑定或连接 NetMQ 套接字 |
| 断开 | OffAsync() |
关闭 NetMQ 套接字 |
| 发布 | ProduceAsync(topic, string, Encoding?) |
发布带主题的字符串消息 |
| 发布 | ProduceAsync(topic, byte[]) |
发布带主题的原始字节 |
| 订阅 | ConsumeAsync(topic) |
订阅主题模式 |
| 取消订阅 | UnConsumeAsync(topic) |
移除主题订阅 |
事件
| 事件 | 签名 | 描述 |
|---|---|---|
OnDataEvent |
EventHandler<EventDataResult> |
收到消息时触发 |
OnDataEventAsync |
EventHandlerAsync<EventDataResult> |
OnDataEvent 的异步变体 |
OnInfoEvent |
EventHandler<EventInfoResult> |
收到状态和对等事件时触发 |
OnInfoEventAsync |
EventHandlerAsync<EventInfoResult> |
OnInfoEvent 的异步变体 |
OnLanguageEvent |
EventHandler<EventLanguageResult> |
语言变更时触发 |
OnLanguageEventAsync |
EventHandlerAsync<EventLanguageResult> |
OnLanguageEvent 的异步变体 |
