项目作者: August14th

项目描述 :
使用Netty+Postgres实现的MQTT服务器
高级语言: Java
项目地址: git://github.com/August14th/london.git
创建时间: 2017-09-01T12:35:53Z
项目社区:https://github.com/August14th/london

开源协议:MIT License

下载


london

london是一个使用Netty+Postgres实现的MQTT服务器,暂时只支持QoS1。

london支持分布式部署,并且所有的MQTT终端看到的消息顺序是一致的。这得益于Postgres的Listen/Notify以及事务。

架构

london

接收消息(Inbound)

london在收到publish消息后,会在Postgres中开启一个事务。

1、更新这条消息所属的topic的LastMessageId + 1

2、把LastMessageId作为这条消息的id, 同这条消息一同保存到MongoDB中

3、Notify到PostgresSQL的channel中。Postgres会把这消息通知到正在监听这条channel的Dispatcher

最后结束事务。

之所以在事务中更新消息Id和Notify,是因为这样可以保证正在监听的Dispatcher收到的消息的message Id是有序的,
如果update和notify不在一个事务中,那么就会出现后生成的message Id先到达Dispatcher的情况,导致消息乱序。

发送消息(Outbound)

Dispatcher在接收到Postgres的channel发送过来的消息后,直接扔到一个buffer中,接下来会由Sending-thread来发送给用户。
典型的生产者-消费者模型。