实现了 AMQP 与 MQTT(至多一次) 后, 用多个队列以 topic exchange 的方式用相同交换机监听同一个主题 (topic), 发现情况存在不同, 觉得有点意思, 所以记录了下来.
用 2 个 MQTT(分别记作 A,B),2 个 AMQP(分别记作 C,D) 同时监听一个 topic,
然后向这个 topic 先以 MQTT 的方式发送 4 条消息 (分别记作 1,2,3,4),
再以 AMQP 方式发送 4 条消息 (分别记作 5,6,7,8),
结果如下:
- A:1,2,3,4,5,6,7,8;
- B:1,2,3,4,5,6,7,8;
- C:1,3,5,7;
D:2,4,6,8.
说明 AMQP 与 MQTT 发送封装后大致相同, 而接收存在差异.
AMQP 以轮询的方式接收消息, 而 MQTT 则能全部接收.
当我继续探究两者之间是否存在相互影响时, 我又发现了一些有趣的现象:
1, 当 AMQP 与 MQTT 同时在线时, 两边之间互不影响.
2, 当仅有 AMQP 在线时收到消息, 然后一个 MQTT 开始监听, MQTT 收不到消息.
3, 当仅有 MQTT 在线时收到消息, 然后一个 AMQP 开始监听, AMQP 能收到消息.
根据 2,3 我推出: MQTT 无法读取队列中的离线消息, 在线读取后不会删除队列消息; 而 AMQP 能读取队列中的离线消息, 读取消息后会删除消息.
然后根据 1, 我推测 MQTT 先于 AMQP 读取消息 (不知道对不对).
来源: http://www.bubuko.com/infodetail-2794249.html