MQTT客户端--基于paho实现(Java)

MQTT Paho Java客户端 Paho Java客户端是用Java编写的MQTT客户端库,用于开发在JVM或其他Java兼容平台(例如Android)上运 行的应用程序。Paho不仅可以对接EMQ X Broker,还可以对接满足符合MQTT协议规范的消息代理服务端,目前Paho可以支 持到MQTT5.0以下版本。MQTT3.3.1协议版本基本能满足百分之九十多的接入场景。MqttAsyncClient提供了一个完全异步的API,其中活动的完成是通过注册的回调通知的。 阅读详情


订阅类:

  1. <!--lang:java-->
  2. package org.chisj.mqtt;
  3. import java.util.concurrent.Executors;
  4. import java.util.concurrent.ScheduledExecutorService;
  5. import java.util.concurrent.TimeUnit;
  6. import org.eclipse.paho.client.mqttv3.MqttClient;
  7. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
  8. import org.eclipse.paho.client.mqttv3.MqttException;
  9. import org.eclipse.paho.client.mqttv3.MqttSecurityException;
  10. import org.eclipse.paho.client.mqttv3.MqttTopic;
  11. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
  12. public class Client {
  13. //public static final String HOST = "tcp://0.0.0.0:61613";
  14. public static final String HOST = "tcp://192.168.1.100:1883";
  15. public static final String TOPIC = "webServer";
  16. private static final String clientid = "client124";
  17. private MqttClient client;
  18. private MqttConnectOptions options;
  19. private String userName = "admin";
  20. private String passWord = "password";
  21. private ScheduledExecutorService scheduler;
  22. private void start() {
  23. try {
  24. // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
  25. client = new MqttClient(HOST, clientid, new MemoryPersistence());
  26. // MQTT的连接设置
  27. options = new MqttConnectOptions();
  28. // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
  29. options.setCleanSession(true);
  30. // 设置连接的用户名
  31. options.setUserName(userName);
  32. // 设置连接的密码
  33. options.setPassword(passWord.toCharArray());
  34. // 设置超时时间 单位为秒
  35. options.setConnectionTimeout(10);
  36. // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
  37. options.setKeepAliveInterval(20);
  38. // 设置回调
  39. client.setCallback(new PushCallback());
  40. MqttTopic topic = client.getTopic(TOPIC);
  41. //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
  42. //options.setWill(topic, "close".getBytes(), 2, true);
  43. client.connect(options);
  44. //订阅消息
  45. int[] Qos = {1};
  46. String[] topic1 = {TOPIC};
  47. client.subscribe(topic1, Qos);
  48. } catch (Exception e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. public static void main(String[] args) throws MqttException {
  53. Client client = new Client();
  54. client.start();
  55. }
  56. }

发布类:

  1. /**
  2. * @Title: Server.java
  3. * @Package org.chisj.mqtt
  4. * @Description: TODO
  5. * @author chisj chisj@foxmail.com
  6. * @date 2017年4月1日
  7. */
  8. package org.chisj.mqtt;
  9. import org.eclipse.paho.client.mqttv3.MqttClient;
  10. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
  11. import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
  12. import org.eclipse.paho.client.mqttv3.MqttException;
  13. import org.eclipse.paho.client.mqttv3.MqttMessage;
  14. import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
  15. import org.eclipse.paho.client.mqttv3.MqttTopic;
  16. import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
  17. /**
  18. * ClassName: Server
  19. * @Description: TODO
  20. * @author chisj chisj@foxmail.com
  21. * @date 2017年4月1日
  22. */
  23. public class Server {
  24. //public static final String HOST = "tcp://0.0.0.0:61613";tcp://192.168.1.100:1883
  25. public static final String HOST = "tcp://192.168.1.100:1883";
  26. public static final String TOPIC = "webServer";
  27. public static final String TOPIC125 = "toclient/125";
  28. private static final String clientid = "server";
  29. private MqttClient client;
  30. private MqttTopic topic;
  31. private MqttTopic topic125;
  32. private String userName = "admin";
  33. private String passWord = "password";
  34. private MqttMessage message;
  35. public Server() throws MqttException {
  36. // MemoryPersistence设置clientid的保存形式,默认为以内存保存
  37. client = new MqttClient(HOST, clientid, new MemoryPersistence());
  38. connect();
  39. }
  40. private void connect() {
  41. MqttConnectOptions options = new MqttConnectOptions();
  42. options.setCleanSession(false);
  43. options.setUserName(userName);
  44. options.setPassword(passWord.toCharArray());
  45. // 设置超时时间
  46. options.setConnectionTimeout(10);
  47. // 设置会话心跳时间
  48. options.setKeepAliveInterval(20);
  49. try {
  50. client.setCallback(new PushCallback());
  51. client.connect(options);
  52. topic = client.getTopic(TOPIC);
  53. topic125 = client.getTopic(TOPIC125);
  54. } catch (Exception e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. public void publish(MqttTopic topic , MqttMessage message) throws MqttPersistenceException,
  59. MqttException {
  60. MqttDeliveryToken token = topic.publish(message);
  61. token.waitForCompletion();
  62. System.out.println("message is published completely! "
  63. + token.isComplete());
  64. }
  65. public static void main(String[] args) throws MqttException {
  66. Server server = new Server();
  67. server.message = new MqttMessage();
  68. server.message.setQos(2);
  69. server.message.setRetained(true);
  70. server.message.setPayload("给客户端124推送的信息".getBytes());
  71. server.publish(server.topic , server.message);
  72. server.message = new MqttMessage();
  73. server.message.setQos(2);
  74. server.message.setRetained(true);
  75. server.message.setPayload("给客户端125推送的信息".getBytes());
  76. server.publish(server.topic125 , server.message);
  77. System.out.println(server.message.isRetained() + "------ratained状态");
  78. }
  79. }

回调类:

  1. /**
  2. * @Title: PushCallback.java
  3. * @Package org.chisj.mqtt
  4. * @Description: TODO
  5. * @author chisj chisj@foxmail.com
  6. * @date 2017年4月1日
  7. */
  8. package org.chisj.mqtt;
  9. import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
  10. import org.eclipse.paho.client.mqttv3.MqttCallback;
  11. import org.eclipse.paho.client.mqttv3.MqttMessage;
  12. /**
  13. * 发布消息的回调类
  14. *
  15. * 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
  16. * 每个客户机标识都需要一个回调实例。在此示例中,构造函数传递客户机标识以另存为实例数据。
  17. * 在回调中,将它用来标识已经启动了该回调的哪个实例。
  18. * 必须在回调类中实现三个方法:
  19. *
  20. * public void messageArrived(MqttTopic topic, MqttMessage message)接收已经预订的发布。
  21. *
  22. * public void connectionLost(Throwable cause)在断开连接时调用。
  23. *
  24. * public void deliveryComplete(MqttDeliveryToken token))
  25. * 接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。
  26. * 由 MqttClient.connect 激活此回调。
  27. *
  28. */
  29. public class PushCallback implements MqttCallback {
  30. public void connectionLost(Throwable cause) {
  31. // 连接丢失后,一般在这里面进行重连
  32. System.out.println("连接断开,可以做重连");
  33. }
  34. public void deliveryComplete(IMqttDeliveryToken token) {
  35. System.out.println("deliveryComplete---------" + token.isComplete());
  36. }
  37. public void messageArrived(String topic, MqttMessage message) throws Exception {
  38. // subscribe后得到的消息会执行到这里面
  39. System.out.println("接收消息主题 : " + topic);
  40. System.out.println("接收消息Qos : " + message.getQos());
  41. System.out.println("接收消息内容 : " + new String(message.getPayload()));
  42. }
  43. }
运行结果:



使用eclipse paho在java端实现MQTT消息的收发(客户端与服务端实例) 一、MQTT(消息队列)简介MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。 常用的有eclipse paho、activeMQ、阿里MQTT和其他的实现,本实例使用paho1、使用场景:1、不 阅读详情

相关推荐

【项目实战】使用 Eclipse Paho Java 让Java应用程序中实现MQTT通信协议

Eclipse Paho Java 是一个开源的,功能强大,易于使用 的 MQTT 客户端库它提供了一个轻量级的客户端,用于在Java应用程序中实现MQTT通信协议的功能。它可帮助 Java 开发人员快速实现 MQTT 通信协议的功能。它提供多个 API,简化 MQTT 协议的实现和使用,并支持多种 MQTT 版本。使用Eclipse Paho Java可以轻松创建MQTT客户端,发送或接收消息。

奶爸的编程之路,也就一周冷个三天 2616

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

一、MQTT(消息队列)简介MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。常用的有eclipse paho、activeMQ、阿里MQTT和其他的实现,本实例使用paho1、使用场景:1、不可...

weixin_42411545的博客 1219

12、利用 Eclipse Paho Java 客户端实现 MQTT 安全连接

本文详细介绍了如何使用 Eclipse Paho Java 客户端实现与 MQTT 服务器的安全连接。内容涵盖 Maven 项目配置、安全辅助类的创建、TLS 连接的配置方法以及消息的订阅与发布功能的实现。通过具体代码示例和流程图,帮助开发者快速掌握在 IoT 应用中使用 Paho 客户端进行安全通信的关键步骤。

eee77的博客 174

MQTT客户端 Paho Java 使用

文章目录01、maven 依赖02、代码1-publisher 发布者2-订阅者 subscriber 01、maven 依赖 <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.2</version> </depende

zona_wzq的博客 2178

java之使用org.eclipse.paho.client.mqttv3实现客户端订阅mqtt消息

【代码】java之使用org.eclipse.paho.client.mqttv3实现客户端订阅mqtt消息。

我不是码农的博客~~~ 327

Gemini国内合规接入指南:API身份链构建与镜像站选型

生成式AI服务接入本质是服务可用性工程,而非单纯网络连通问题。理解大模型API调用原理,关键在于掌握身份认证、权限控制与数据流向三大技术要素。Gemini作为主流多模态模型,其国内可用路径已从‘模拟访问’转向‘能力映射’——聚焦文本生成等核心能力的稳定调用。通过构建七步Google Cloud身份链(含+86实名、国际信用卡核验、Service Account最小权限配置),可实现99.2%高成功率的合规API接入;而教育型、企业型、开发者型三类镜像站则提供差异化过渡方案,均需满足端到端加密、境内CDN托管

weixin_29046035的博客 440

在JAVA中使用Paho MQTT客户端

为了确保主线程不会因为 Spring Boot 的启动过程而退出,可以在。方法中使用一个新的线程来运行 MQTT 客户端逻辑。至此第一部分的功能已经完成了,以下是扩展功能。

2301_78955442的博客 1214

树莓派与ROS2

树莓派与ROS2(Robot Operating System 2)的结合使用为机器人开发、自动化控制以及物联网项目提供了强大的平台。

weixin_47695827的博客 1756

Eclipse paho实现的MQTT Java客户端

Eclipse paho是eclipse基金会下面的一个开源项目,基于MQTT协议的客户端,用多种语言的实现,什么是MQTT协议?不废话,自己百度去 这几年的很火的物联网多是基于这个协议来通信的。 Eclipse paho客户端支持的语言: 这里是我用java swing做的一个MQTT通信客户端,实现了连接MQTT服务器 订阅-发送消息 MQTT服务器搭建在树莓派3b上 使用

文博那些事儿 1万+

Ovito隐藏技巧:用Expression Selection快速提取分子链(附模糊背景配置参数)

本文详细介绍了Ovito软件中Expression Selection功能的隐藏技巧,用于从复杂的分子动力学模拟数据中快速、精准地提取目标分子链。通过结合Expand Selection和Invert Selection等修饰器,形成一套高效的工作流,并深入解析了实现SCI论文级渲染效果的景深模糊参数配置,帮助研究者大幅提升数据处理与图片生成效率。

pz890123的博客 869

Unity 2021 LTS安装避坑指南:从下载到第一个3D项目的完整流程

本文提供了一份详尽的Unity 2021 LTS安装与首个3D项目创建指南。内容涵盖从Unity Hub下载、版本选择、模块安装避坑,到编辑器界面解析、创建旋转立方体脚本的完整流程,旨在帮助初学者快速搭建稳定开发环境并上手核心操作。

mango的博客 312

使用Paho MQTT客户端在Java中实现物联网通信

本文介绍了如何在Java中使用Eclipse Paho客户端实现MQTT协议通信。主要内容包括:MQTT 3.1.1和5.0版本的连接建立、TLS/SSL安全连接配置、消息发布与订阅功能实现。提供了完整的示例代码,涵盖连接管理、安全认证和QoS设置等核心功能,并解答了连接断开处理和消息可靠性等常见问题。通过Paho客户端库,开发者可以快速构建基于MQTT协议的物联网通信应用。

随便写写 797

ANSYS Maxwell:从RMxprt到3D轴向磁通电机的无缝建模指南

本文详细介绍了如何利用ANSYS RMxprt作为高效起点,快速构建3D轴向磁通电机的有限元分析模型。通过RMxprt内置模板输入关键参数并完成磁路法计算后,可一键生成包含几何、材料、绕组及边界条件的即用型Maxwell 3D模型,极大简化了复杂三维结构的建模流程,使工程师能专注于性能优化与仿真分析。

weixin_29281941的博客 556

MQTT Java客户端Eclipse paho实现数据的发送和接收

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。 客户端API使用官方推荐的Eclipse Paho   服务端   1 package bs...

潜行IT的博客 1433

小智AI语音控制实战:从工具注册到音量调节的MCP交互全流程

本文详细拆解了基于小智AI与MCP协议实现本地智能语音控制的完整交互流程。以ESP32平台为例,从开发环境搭建、MCP服务器初始化、工具注册,到用户语音指令的接收、解析、硬件执行与结果反馈,提供了全链路实战代码。重点阐述了如何通过MCP协议将AI的意图理解与设备功能执行在本地高效耦合,实现毫秒级响应的音量调节等控制,为嵌入式AI开发者提供了清晰的实现路径。

weixin_29165725的博客 347

29、集成电路测试技术解析

本文深入解析了集成电路测试技术,涵盖定制电路测试资源与策略、混合模拟/数字电路测试方法、数字测试模式生成难点与解决方案,以及可控性和可观测性的核心概念。同时详细讨论了固定故障、桥接故障和开路故障等主要故障模型及其检测方法。在测试技术的综合应用与优化方面,提出了合理配置测试资源、优化测试模式和设计测试流程的策略。最后展望了测试技术的发展趋势,包括集成化测试、自动化测试和智能化测试。通过全面掌握这些测试技术,可以有效提高集成电路的质量和可靠性,推动集成电路产业的发展。

work3的博客 206

SpringBoot中使用Spring integration加Eclipse Paho Java Client 实现MQTT客户端

连接MQTT 5.0协议代理服务器 使用单向认证连接MQTT 5.0协议代理服务器,设置了断线自动重连,连接MQTT 5.0协议代理服务器,连接MQTT 3.1.1协议代理服务器

青鸟飞鱼 2876

Python库CloudScraper详细使用(绕过 Cloudflare 的反机器人页面的 Python 模块)

CloudScraper是一个专门用于绕过Cloudflare反机器人保护的Python库,它基于requests库构建,能够处理Cloudflare的5秒盾、WAF和人机验证等防护机制。

数据知道的博客 1万+

基于:Eclipse paho 的MQTT Java客户端实现数据的发送和接收

MQTT(MQ Telemetry Transport)是IBM开发的一种网络应用层的协议使用场景:1、不可靠、网络带宽小的网络2、运行的设备CPU、内存非常有限特点:1、基于发布/订阅模型的协议2、他是二进制协议,二进制的特点就是紧凑、占用空间小。他的协议头只有2个字节3、提供了三种消息可能性保障:最多一次 0、最少一次 1、只有一次 2maven依赖[html] view plain copy...

大树叶 技术专栏 3618

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MQTT JAVA String客户端连接EMQ(Paho实现收发消息(订阅和发布))

log.error("MQTT发布失败,失败原因={},topic={},msg={},qos={},retain={}"+e.getMessage(),topic,mqttMessage,msg.getBytes(),qos.value(),retain);log.error("MQTT初始化异常Broker_url={},Client_id={},"+e.getMessage(),mqttEntity.getBroker_url(),mqttEntity.getClient_id());

分享 AI Agent、大模型与后端开发实战; 空门技术栈。 1702

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: Druid使用Kafka Indexing Service方式push数据以及实时节点pull数据步骤
下一篇: Druid集群配置
王树民
博客等级 码龄10年 912粉丝 560原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值