6 releases

0.1.0-alpha.8 Nov 5, 2024
0.1.0-alpha.7 Oct 31, 2024

#237 in Asynchronous

Download history 234/week @ 2024-10-19 395/week @ 2024-10-26 153/week @ 2024-11-02 14/week @ 2024-11-09

796 downloads per month
Used in 3 crates (via bios-sdk-invoke)

MIT/Apache

240KB
6.5K SLoC

Project: Embedded Message Queue

结构

嵌入服务中

  • Node: 节点
    • Topic:主题(消息流)
      • EndPoint:消息的订阅者
      • Message: 消息

连接

任意协议的连接,只要能双向传输二进制数据的都因该可以作为连接底层的信道 目前使用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
~446K SLoC