200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 使用eclipse paho在java端实现MQTT消息的收发(客户端与服务端实例)

使用eclipse paho在java端实现MQTT消息的收发(客户端与服务端实例)

时间:2022-03-18 15:11:20

相关推荐

使用eclipse paho在java端实现MQTT消息的收发(客户端与服务端实例)

一、MQTT(消息队列)简介

MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。

常用的有eclipse paho、activeMQ、阿里MQTT和其他的实现,本实例使用paho

1、使用场景:

1、不可靠、网络带宽小的网络

2、运行的设备CPU、内存非常有限

(我个人主要是用在服务端与嵌入式客户端进行消息和广告的通信)

2、特点:

1、基于发布/订阅模型的协议

2、他是二进制协议,二进制的特点就是紧凑、占用空间小。他的协议头只有2个字节

3、提供了三种消息可能性保障(Qos):0:最多一次 、1:最少一次 、2:只有一次

3、关键字

1、HOST:搭载MQTT的服务器地址

2、TOPIC:消息主题,可以被客户端订阅,实现对应消息的收发

3、clientId:客户端ID,用于服务器对不同客户端的识别

4、subscribe/unsubscribe:客户端对消息主题的订阅和取消订阅

5、Qos:消息的服务质量,当网络过载或拥塞时,QoS 能确保重要业务量不受延迟或丢弃

6、Callback:当客户端收到消息后对消息的处理(回调)

7、KeepAliveInterval:客户端与服务器之间的连接是通过发送心跳包来保持存活

二、JAVA端实例

首先导入所依赖jar包1、服务端代码(负责消息的发送)

package com.sc.util.paho;import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttPersistenceException; import org.eclipse.paho.client.mqttv3.MqttTopic; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; /** * Title:Server 这是发送消息的服务端 * Description: 服务器向多个客户端推送主题,即不同客户端可向服务器订阅相同主题 * @author rao */ public class ServerMQTT { //tcp://MQTT安装的服务器地址:MQTT定义的端口号 public static final String HOST = "tcp://dev.****.:1883"; //定义一个主题 public static final String TOPIC = "pos_message_all"; //定义MQTT的ID,可以在MQTT服务配置中指定 private static final String clientid = "server11"; private MqttClient client; private MqttTopic topic11; private String userName = "paho"; //非必须 private String passWord = ""; //非必须 private MqttMessage message; /** * 构造函数 * @throws MqttException */ public ServerMQTT() throws MqttException { // MemoryPersistence设置clientid的保存形式,默认为以内存保存 client = new MqttClient(HOST, clientid, new MemoryPersistence()); connect(); } /** * 用来连接服务器 */ private void connect() { MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(false); options.setUserName(userName); options.setPassword(passWord.toCharArray()); // 设置超时时间 options.setConnectionTimeout(10); // 设置会话心跳时间 options.setKeepAliveInterval(20); try { client.setCallback(new PushCallback()); client.connect(options); topic11 = client.getTopic(TOPIC); } catch (Exception e) { e.printStackTrace(); } } /** * * @param topic * @param message * @throws MqttPersistenceException * @throws MqttException */ public void publish(MqttTopic topic , MqttMessage message) throws MqttPersistenceException, MqttException { MqttDeliveryToken token = topic.publish(message); token.waitForCompletion(); System.out.println("message is published completely! " + token.isComplete()); } /** * 启动入口 * @param args * @throws MqttException */ public static void main(String[] args) throws MqttException { ServerMQTT server = new ServerMQTT(); server.message = new MqttMessage(); server.message.setQos(1); //保证消息能到达一次 server.message.setRetained(true); server.message.setPayload("这是推送消息的内容".getBytes()); server.publish(server.topic11 , server.message); System.out.println(server.message.isRetained() + "------ratained状态");

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。