5 releases
new 0.1.0-alpha.7 | Oct 31, 2024 |
---|---|
0.1.0-alpha.6 | Oct 30, 2024 |
0.1.0-alpha.5 | Oct 28, 2024 |
0.1.0-alpha.4 | Oct 25, 2024 |
0.1.0-alpha.3 | Oct 21, 2024 |
#254 in Asynchronous
385 downloads per month
Used in 3 crates
(via bios-sdk-invoke)
225KB
6K
SLoC
Project: Embedded Message Queue
结构
嵌入服务中
- Node: 节点
- Topic:主题(消息流)
- EndPoint:消息的订阅者
- Message: 消息
- Topic:主题(消息流)
连接
任意协议的连接,只要能双向传输二进制数据的都因该可以作为连接底层的信道 目前使用TCP和WEBSOCKET
编码
参考bincode,基于rust数据类型的编码。参看
js方:根据Rust类型定义,解析到JavaScript中的值
节点
簇节点
被嵌入的程序(如BIOS),簇节点间通过RAFT来保持一致性,应当拥有所有的权限
边缘节点
通过连接到一个簇节点来获得服务,操作应当被簇节点鉴权
端点
端点是消息的接收方,可以更改自己的兴趣
消息
消息具有多个 Subject
, 端点会订阅多个Interest
,
Subject
是具体的,Interest
可以是一个glob匹配
内存里储存一个树,主题可以根据消息的Subject找到所有对其感兴趣的端点: 代码
消息推送模式
1. 广播
所有对此消息感兴趣的端点,都会收到
2. 工作队列
只有一个在线的,对此消息感兴趣的端点会收到消息。
选择端点
消息id hash + 所有候选端点hash来决定
3. 持久化
消息通过持久化服务(如数据库)储存,消息在满足条件前会一直处于内存中,所有新加入的,感兴趣的端点都会被推送
主题(消息流)
阻塞性
阻塞
在队头的消息被标记为解决前,后面的消息不会发送,
非阻塞
消息按顺序发送,但是新消息发送不必等待之前的消息被解决
事件
在此系统基础上封装的接口,直接通过trait定义事件,注册handler来处理
(此处可参看bios的handler)
Dependencies
~9–31MB
~442K SLoC