节选自论文《Message Queuing Telemetry Transport (MQTT) 在森林产品应用中的分析与概述》(Analysis and Overview of Message Queuing Telemetry Transport (MQTT) as Applied to Forest
Products Applications),发表于《IEEE TRANSACTIONS ON INDUSTRY APPLICATIONS》2022年11月/12月第58卷第6期。
最佳实践1:通配符(Wildcards)
- MQTT允许使用通配符字符来简化搜索和查询内容,但需要谨慎使用以维护数据访问的完整性。
- 建议仅在管理应用程序中使用多级通配符(例如“#”),而客户端订阅应仅使用单级通配符(例如“+”)。
最佳实践2:上下文标识符(Context Identifiers)
- MQTT主题没有关于数据内容的上下文信息。为了解决这个问题,建议在消息负载中包含一个上下文标识符。
- 这允许数据的下游消费者知道如何解释、建模或向其他客户端或用户展示数据。
最佳实践3:客户端标识符(Client Identifiers)
- 为了避免数据混淆,建议在主题路径中包含一个唯一的设备名称,并在连接到MQTT时使用该名称作为客户端ID。
- 此外,建议在独立的主题中发布客户端ID,以便用户或客户端可以在一个地方快速查看和评估所有客户端连接的健康状况。
最佳实践4:文档化(Documentation)
- 与任何系统一样,文档是维护系统寿命和可维护性的关键。
- MQTT系统的拥有者应该记录预期的主题,并包括系统中的所有发布者和订阅者。
- 建议使用图形表示法来展示概念,并记录所有主题和前缀,以及数据如何在发布者和订阅者之间流动。
- 还建议记录主题前缀,区分只读和读写数据,以明确哪些数据是只读的,哪些数据可以被命令执行。
最佳实践5:MQTT不能解决所有问题(MQTT Cannot Solve All Problems)
- 虽然MQTT在过程应用中提供了许多显著的优势,但由于其抽象能力,MQTT并不能完全满足所有人的需求。
- 在决定MQTT是否适合解决应用问题之前,应进行最佳工程判断和研究,以了解系统和数据速率的要求。
- 例如,尽管MQTT可以实现QoS以优先处理数据包的优先级和传输工作,但它不应被视为替代系统内持久消息队列应用程序(如RabbitMQ或Kafka)的解决方案。
这些最佳实践是作者和其他行业专家根据他们的经验和部署MQTT系统所总结出来的。它们应被视为指导性建议,而不是一成不变的规则,因为每个工程应用和部署都有其独特性,需要根据应用的特点来做出最好的工程实践和设计决策。