热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pahomqttjavaclientdemo

pom依赖org.eclipse.pahoorg.eclipse.paho.client.mqt

==pom依赖==


org.eclipse.paho
org.eclipse.paho.client.mqttv3
1.2.1

 


==Java样例代码==

package com.rexel.core.common.utils.mqtt;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
/**
* MQTT Utils
*
*
@author admin
* @date 2022-2-24
*/
public class MqttUtils {
public static void main(String[] args) {
String serverUrl
= "tcp://36.137.154.92:1883";
String clientId
= "client111";
String username
= "root";
String password
= "test123";
String topic
= "qch_test1";
try {
MqttConnectOptions options
= new MqttConnectOptions();
// 设置连接的用户名
options.setUserName(username);
// 设置连接的密码
options.setPassword(password.toCharArray());
// 设置是否清空session
// 设置为false表示服务器会保留客户端的连接记录
// 设置为true表示每次连接到服务器都以新的身份连接
options.setCleanSession(false);
// 设置会话心跳时间
options.setAutomaticReconnect(true);
// 设置超时时间,单位为秒
options.setConnectionTimeout(10);
// 设置会话心跳时间,单位为秒
// 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
options.setKeepAliveInterval(20);
// host:服务连接地址
// clientIId:连接MQTT的客户端ID,一般以唯一标识符表示
// MemoryPersistence:clientId的保存形式,默认为以内存保存
MqttClient client = new MqttClient(serverUrl, clientId, new MemoryPersistence());
// 设置回调
MyMqttCallback callback = new MyMqttCallback(topic, client);
client.setCallback(callback);
// 建立连接
client.connect(options);
// 发送测试消息
MqttMessage pubMsg = new MqttMessage();
pubMsg.setPayload(
"我的第一个MQTT消息".getBytes());
pubMsg.setQos(
2);
// 当订阅消费端服务器重新连接MQTT服务器时,总能拿到该主题最新消息, 这个时候我们需要把retained设置为true;
// 当订阅消费端服务器重新连接MQTT服务器时,不能拿到该主题最新消息,只能拿连接后发布的消息,这个时候我们需要把 retained设置为false;
pubMsg.setRetained(true);
client.publish(topic, pubMsg);
}
catch (MqttException e) {
e.printStackTrace();
}
}
static class MyMqttCallback implements MqttCallbackExtended {
private final String topic;
private final MqttClient client;
public MyMqttCallback(String topic, MqttClient client) {
this.topic = topic;
this.client = client;
}
@Override
public void connectComplete(boolean b, String s) {
System.out.println(
"连接成功");
// 订阅消息
// QoS0,At most once,至多一次;
// QoS1,At least once,至少一次;
// QoS2,Exactly once,确保只有一次。
int[] qos = {2};
String[] topics
= {topic};
try {
client.subscribe(topics, qos);
}
catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void connectionLost(Throwable throwable) {
System.out.println(
"连接断开");
}
@Override
public void messageArrived(String topics, MqttMessage message) {
System.out.println(
"接收消息主题:" + topics);
System.out.println(
"接收消息Qos:" + message.getQos());
System.out.println(
"接收消息内容:" + new String(message.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
System.out.println(
"deliveryComplete---------" + iMqttDeliveryToken.isComplete());
}
}
}

 


==执行结果==

连接成功
deliveryComplete
---------true
接收消息主题:qch_test1
接收消息Qos:
2
接收消息内容:我的第一个MQTT消息

 



推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 五、RabbitMQ Java Client基本使用详解
    JavaClient的5.x版本系列需要JDK8,用于编译和运行。在Android上,仅支持Android7.0或更高版本。4.x版本系列支持7.0之前 ... [详细]
  • 浅析对象 VO、DTO、DO、PO 概念
    作者|CatQi链接|cnblogs.comqixuejiap4390086.html前言由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 多线程补充(一)JVM内存结构 VS Java内存模型 VS Java对象模型
    一:Java内存结构参考:https:www.zhihu.comquestion64586462answer576543433内存结构࿱ ... [详细]
author-avatar
mobiledu2502886233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有