MoonBit NATS client with TCP/TLS, WebSocket, JetStream, KV and Object Store.
| 模块 | 已实现内容 |
|---|---|
| 协议核心 | 增量解析 INFO/MSG/HMSG/PING/PONG/+OK/-ERR;CONNECT/PUB/HPUB/SUB/UNSUB;二进制载荷、重复 Headers、状态码、长度与截断检查 |
| 连接 | 原生 TCP/TLS、原生与浏览器 WebSocket;握手、心跳、多地址切换、带随机抖动的指数退避、服务发现与订阅恢复、Lame Duck 通知、有界可选断线缓存、可要求 TLS 地址 |
| NATS Core | 普通/通配符/队列组订阅、自动退订、请求响应、无响应者错误、超时取消、Flush、Drain |
| 流量控制 | 有界待发送字节预算、订阅队列和字节预算、慢消费者错误、连接状态回调、统计信息 |
| 认证 | 用户密码、Token、NKey seed、JWT + nonce 签名;TLS 默认验证证书和主机名,可配置自定义 CA、TLS-first、标准 .creds 与连接时动态凭据 |
| JetStream | Stream/Consumer 创建、查询、更新、删除与列表;发布确认、消息 ID 去重、预期版本条件;Pull Consumer、批量拉取、ACK/NAK/延迟 NAK/WPI/TERM、同步 ACK、消息元数据、有界预取、逐条处理结果与确认式 ACK 的 Worker、去重窗口内的发布重试、并发发布、Push/Ordered Reader、类型化配置和全分页列表 |
| KV | 读写、创建、版本条件更新、历史、删除/清理标记、删除后重建、当前值与增量 Watch、带初始快照完成信号与重连重同步及 TTL 到期过滤的配置缓存 |
| Object Store | 流式分块上传/下载、元数据、对象覆盖、列举、删除、SHA-256 校验、有界内存读取、元数据 Watch/更新、对象与 Bucket 链接、封存 |
| 标准微服务 | Endpoint、队列组、标准错误响应、PING/INFO/STATS 发现与统计、停止收尾 |
| 类型与工具 | 可自定义 Codec、类型化 JSON 发布/请求/订阅、原生诊断 CLI、六个使用示例与浏览器示例、Prometheus 文本指标、可复现基准 |
git clone https://github.com/LilaLola67/MoonNATS.git
cd MoonNATS
moon update
moon check --target native --deny-warn
moon build --target native
moon test --target all
moon run cmd/mainnats-server -a 127.0.0.1 -p 4222 -js
# 另一个终端:
moon run examples/pubsub
moon run examples/request_reply
moon run examples/tasks
moon run examples/reliable_tasksimport {
"LilaLola67/moonnats/client",
"moonbitlang/core/async",
}async fn main {
@client.with_client(@client.Options::new(), c => {
let sub = c.subscribe("orders.*", queue="workers")
c.flush()
c.publish("orders.created", b"order-42")
let msg = sub.next(timeout_ms=5000)
println(msg.subject)
c.unsubscribe(sub)
})
}moon run cmd/moonnats -- --help
moon run cmd/moonnats -- info
moon run cmd/moonnats -- pub example.greeting hello
moon run cmd/moonnats -- sub example.greeting 1
moon run cmd/moonnats -- request example.echo hellomoon fmt --check
moon check --target all --deny-warn
moon build --target all
moon test --target allpython -m venv .venv
# 激活虚拟环境后:
python -m pip install -r scripts/requirements-test.txt
python scripts/download_server.py
python scripts/test_all.pymoon build examples/browser --target js
python -m http.server 12800 --bind 127.0.0.1pub(all) struct ConnectOptions {
name : String
user : String?
password : String?
token : String?
jwt : String?
nkey : String?
signature : String?
echo : Bool
}fn ConnectOptions::new(name? : String, user? : String, password? : String, token? : String, jwt? : String, nkey? : String, signature? : String, echo? : Bool) -> ConnectOptionspub struct Decoder {
buffer : Array[Byte]
pending : (String, Int, String?, Int, Int)?
max_line : Int
max_payload : Int
failed : Bool
}fn publish_headers(subject_name : String, headers : Headers, payload : Bytes, reply_to? : String) -> Bytes raise ProtocolErrorInstall
Download zipMoonBit NATS client with TCP/TLS, WebSocket, JetStream, KV and Object Store.