java mqtt

java mqtt,第1张

java mqtt是什么,让我们一起了解一下?

MQTT是一个基于客户端-服务器的消息发布或订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,如果工作在TCP或IP协议上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布或订阅型的消息协议。

MQTT主要应用在哪些场合?

1、它是一种机器之间通讯 machine-to-machine (M2M)、物联网 Internet of Things (IoT)常用的一种轻量级消息传输协议。

2、适用于网络带宽较低的场合。
3、包含发布、订阅模式,通过一个代理服务器(broker),任何一个客户端(client)都可以订阅或者发布某个主题的消息,然后订阅了该主题的客户端则会收到该消息。

实战 *** 作:模拟客户端接收消息。 import javautilconcurrentScheduledExecutorService; import orgeclipsepahoclientmqttv3MqttClient; import orgeclipsepahoclientmqttv3MqttConnectOptions; import orgeclipsepahoclientmqttv3MqttTopic; import orgeclipsepahoclientmqttv3persistMemoryPersistence;   /   模拟一个客户端接收消息     @author Unclue_liu  / public class ClientMQTT {       public static final String HOST = "tcp://192168177:1883";     public static final String TOPIC1 = "pos_message_all";     private static final String clientid = "12345678";     private MqttClient client;     private MqttConnectOptions options;     private String userName = "mqtt";    //非必须     private String passWord = "mqtt";  //非必须     private ScheduledExecutorService scheduler;       private void start() {         try {             // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存             client = new MqttClient(HOST, clientid, new MemoryPersistence());             // MQTT的连接设置             options = new MqttConnectOptions();             // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接             optionssetCleanSession(false);             // 设置连接的用户名             optionssetUserName(userName);             // 设置连接的密码             optionssetPassword(passWordtoCharArray());             // 设置超时时间 单位为秒             optionssetConnectionTimeout(10);             // 设置会话心跳时间 单位为秒 服务器会每隔1520秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制             optionssetKeepAliveInterval(20);             //设置断开后重新连接             optionssetAutomaticReconnect(true);             // 设置回调             clientsetCallback(new PushCallback());             MqttTopic topic = clientgetTopic(TOPIC1);             //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息             //遗嘱             optionssetWill(topic, "close"getBytes(), 1, true);             clientconnect(options);             //订阅消息             int[] Qos = {1};//0:最多一次 、1:最少一次 、2:只有一次             String[] topic1 = {TOPIC1};             clientsubscribe(topic1, Qos);           } catch (Exception e) {             eprintStackTrace();         }     }       public static void main(String[] args)  {         ClientMQTT client = new ClientMQTT();         clientstart();       }

MQTT ( 消息队列遥测传输 )是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族 上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个 消息中间件 。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份: 发布者(Publish) 代理(Broker) (服务器) 、订阅者(Subscribe) 。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。

MQTT传输的消息分为: 主题(Topic)和负载(payload) 两部分:

MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它可以:

在MQTT协议中,一个MQTT数据包由: 固定头(Fixed header)、可变头(Variable header)、消息体(payload) 三部分构成。MQTT数据包结构如下:

(1) 固定头(Fixed header) 。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
(2) 可变头(Variable header) 。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
(3) 消息体(Payload) 。存在于部分MQTT数据包中,表示客户端收到的具体内容。

固定头存在于所有MQTT数据包中,其结构如下:

相于一个4位的无符号值,类型、取值及描述如下

在不使用标识位的消息类型中,标识位被作为保留位。如果收到无效的标志时,接收端必须关闭网络连接:

Payload消息体位MQTT数据包的第三部分,包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息:

以原生支持“MQTT协议”切入物联网战场
原生支持MQTT协议成为百度开放云推出的物联网服务一大特点。首先需要解读的是,为什么百度开放云会选择“MQTT协议”?
百度开放云支持的MQTT(Message Queuing Telemetry Transport)是国际物联网标准协议,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务,可以适应各种物联网应用场景。
相对于其它标准协议,MQTT属于轻量级双向消息传输协议,主要优势是开源、可靠、轻巧、简单。MQTT的传输格式非常精小,最小的数据包只有2个比特,且无应用消息头。MQTT可以保证消息的可靠性,它包括三种不同的服务质量(最多只传一次、最少被传一次、一次且只传一次),如果客户端意外掉线,可以使用“遗愿”发布一条消息,同时支持持久订阅。
MQTT在物联网应用中的主要优势有:一,可靠传输。MQTT可以保证消息可靠安全的传输,并可以与企业应用简易集成;二,消息推送。支持消息实时通知、丰富的推送内容、灵活的Pub-Sub以及消息存储和过滤。三,低带宽、低耗能、低成本。占用移动应用程序带宽小,并且带宽利用率高,耗电量较少。
MQTT的优势还表现在安全性。安全设计对于物联网项目而言,是需要非常重视的问题,但是却常常容易被工程师所轻视。今年央视315晚会,揭秘了无人机、智能摄像头、智能POS机、智能汽车、洗衣机、电烤箱、智能插座等智能家居存在的三大安全隐患——泄露隐私、财产损失、甚至危及生命安全。而MQTT协议则可以提供多层次的安全特性,在传输层上可以使用TLS加密;在应用层提供了客户标识(Client Identifier)以及用户名密码,不但传输的内容是二进制字节,而且还受惠于传输层的TLS加密。
MQTT开放协议已有17年历史,先期在2014年被国际标准化组织定义为物联网的推荐协议。在应用层传输协议这个领域,它已经走在了其它协议的前面。正因为MQTT的综合优势非常突显,业界不少专家认为,MQTT非常适合各种物联网场景,有望是未来最主流的物联网标准协议。
原生支持“MQTT协议”背后旨在推动物联网标准化
接下来的问题是,那么为什么百度开放云要在国内率先成为原生支持MQTT协议的公有云服务商?
在笔者看来,首先,这和百度开放云在物联网行业的核心目标有着紧密的关系。在去年的“百度世界2015”开放云论坛上,百度开放云高层曾对物联网的发展战略做出阐述,指出:打破行业与行业之间的界限,以“连接人与服务”为核


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/13231425.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-23
下一篇 2023-06-23

发表评论

登录后才能评论

评论列表(0条)

保存