设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 软件追踪 查看内容

emqttd 0.9.0发布,Erlang集群MQTT消息服务器

2015-7-9 22:57| 发布者: joejoe0332| 查看: 1525| 评论: 0|原作者: oschina|来自: oschina

摘要: emqttd 0.9.0-alpha版本正式发布,该版本改进内容包括:MQTT连接会话(Session)管理每个MQTT客户端连接,不管是否持久的(Persistent),都启动一个连接会话进程。由该会话进程管理:客户端的全部订阅(Subscription)。服 ...

emqttd 0.9.0-alpha版本正式发布,该版本改进内容包括:

MQTT连接会话(Session)管理

每个MQTT客户端连接,不管是否持久的(Persistent),都启动一个连接会话进程。由该会话进程管理:

  1. 客户端的全部订阅(Subscription)。

  2. 服务器发动到客户端的,已发送未确认的Qos1/2消息。

  3. 客户端发送到服务端,未接收到PUBREL的QoS2消息。

  4. 客户端离线时,保存离线的Qos1/2消息。

  5. 可选设置,保存离线的QoS0消息。

MQTT客户端连接可以resume在其他集群节点上的会话(Session)。

消息队列(Message Queue)和飞行窗口(Inflight Window)

每个MQTT会话创建一个简单的内存消息队列,和一个正在处理消息的飞行窗口。

设计如下:

|<----------------- Max Len ----------------->|
      -----------------------------------------------
IN -> |       Pending Messages   | Inflight Window  | -> Out
      -----------------------------------------------
                                 |<--- Win Size --->|
  1. 飞行窗口(Inflight Window)保存当前正在发送未确认的Qos1/2消息。窗口值越大,吞吐越高;窗口值越小,消息顺序越严格。

  2. 当客户端离线或者飞行窗口(Inflight Window)满时,消息缓存到队列。

  3. 如果消息队列满,先丢弃Qos0消息,或者丢弃最早进入队列的消息。

新增扩展Hooks

NameTypeDescription
client.connectedforeachRun when client connected successfully
client.subscribefoldlRun when client subscribe topics
client.unsubscribefoldlRun when client unsubscribe topics
message.publishfoldlRun when message is published
message.ackedfoldlRun when message is acked
client.disconnectedforeachRun when client is disconnnected

全局唯一的消息ID

每一条QoS1/2消息,分配一个全局唯一的、时间序列的消息ID,用于端到端的消息处理。

PktId <-- --> MsgId <-- --> MsgId <-- --> PktId
     |<--- Qos --->|<---PubSub--->|<-- Qos -->|

全局唯一消息ID结构:

--------------------------------------------------------
|        Timestamp       |  NodeID + PID  |  Sequence  |
|<------- 64bits ------->|<--- 48bits --->|<- 16bits ->|
--------------------------------------------------------
  1. 64bits时间戳: erlang:system_time if Erlang >= R18, otherwise os:timestamp

  2. Erlang节点ID: 编码为2字节

  3. Erlang进程PID: 编码为4字节

  4. 进程内部序列号: 2字节的进程内部序列号

完善MQTT V3.1.1协议支持

4.4章节的消息发布重传 - Message delivery retry(#166)

4.6章节的消息发布顺序保证 - Message ordering(#167)

新增告警管理(Alarm Management)

emqttd_alarm模块可以发布JSON格式告警消息到'$SYS/brokers/+/alarms/#'的系统Topic

项目代码结构调整

合并emqtt, emqttd应用,调整代码结构,以便其他Erlang项目嵌入emqttd消息服务器。


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部