缘来路过 发表于 2015-7-25 12:04:38

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

腾讯SNG夏日招聘集结号:200个空缺岗位,JAVA、C++、云计算、Android……

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

[*]  客户端的全部订阅(Subscription)。
[*]  服务器发动到客户端的,已发送未确认的Qos1/2消息。
[*]  客户端发送到服务端,未接收到PUBREL的QoS2消息。
[*]  客户端离线时,保存离线的Qos1/2消息。
[*]  可选设置,保存离线的QoS0消息。
MQTT客户端连接可以resume在其他集群节点上的会话(Session)。
消息队列(Message Queue)和飞行窗口(Inflight Window)
每个MQTT会话创建一个简单的内存消息队列,和一个正在处理消息的飞行窗口。
设计如下:
||  
      -----------------------------------------------
  
IN -> |       Pending Messages   | Inflight Window  | -> Out
  
      -----------------------------------------------
  
                                 ||

[*]  飞行窗口(Inflight Window)保存当前正在发送未确认的Qos1/2消息。窗口值越大,吞吐越高;窗口值越小,消息顺序越严格。
[*]  当客户端离线或者飞行窗口(Inflight Window)满时,消息缓存到队列。
[*]  如果消息队列满,先丢弃Qos0消息,或者丢弃最早进入队列的消息。
  
新增扩展Hooks
NameTypeDescriptionclient.connectedforeachRun when client connected successfullyclient.subscribefoldlRun when client subscribe topicsclient.unsubscribefoldlRun when client unsubscribe topicsmessage.publishfoldlRun when message is publishedmessage.ackedfoldlRun when message is ackedclient.disconnectedforeachRun when client is disconnnected  
全局唯一的消息ID
每一条QoS1/2消息,分配一个全局唯一的、时间序列的消息ID,用于端到端的消息处理。
PktId  MsgId  MsgId  PktId  
     ||||
全局唯一消息ID结构:
--------------------------------------------------------  
|        Timestamp       |  NodeID + PID  |  Sequence  |
  
||||
  
--------------------------------------------------------

[*]  64bits时间戳: erlang:system_time if Erlang >= R18, otherwise os:timestamp
[*]  Erlang节点ID: 编码为2字节
[*]  Erlang进程PID: 编码为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消息服务器。
页: [1]
查看完整版本: emqttd 0.9.0 发布,Erlang集群MQTT消息服务器