MQTT--Java整合EMQX

ops/2024/10/19 1:34:33/

目录

  • 1、简介
  • 2、准备
  • 3、使用步骤
    • 3.1 引入依赖
    • 3.2 创建生产者和消费者
    • 3.3 测试
  • 总结
  • PS:


1、简介

本文章实现了一个简单的MQTT客户端,使用Eclipse Paho库让Java和EMQX整合,测试客户端初始化时配置Broker地址、客户端ID、用户名和密码。连接成功后,订阅主题并发布消息

2、准备

前提是启动了EMQX服务,可以打开这个页面(目的是为了更清楚看见客户端连接和消息的发送):
在这里插入图片描述
不会的可以看这篇文章:MQTT–EMQX入门+MQTTX使用

3、使用步骤

3.1 引入依赖

<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.2</version>
</dependency>

3.2 创建生产者和消费者

生产者类:

java">package com.itxhj.emqxdemo.io;import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;public class App {public static void main(String[] args) {String subTopic = "testtopic/#";String pubTopic = "testtopic/1";String content = "Hello World";int qos = 2;String broker = "tcp://192.168.176.128:1883"; // 地址修改成你开启EMQX的主机地址String clientId = "emqx_test";MemoryPersistence persistence = new MemoryPersistence();try {MqttClient client = new MqttClient(broker, clientId, persistence);// MQTT 连接选项MqttConnectOptions connOpts = new MqttConnectOptions();connOpts.setUserName("admin");	// 客户端的账号,并非EMQX的connOpts.setPassword("123456".toCharArray());  // 客户端的密码,并非EMQX的// 保留会话connOpts.setCleanSession(true);// 设置回调client.setCallback(new OnMessageCallback());// 建立连接System.out.println("Connecting to broker: " + broker);client.connect(connOpts);System.out.println("Connected");System.out.println("Publishing message: " + content);// 订阅client.subscribe(subTopic);// 消息发布所需参数MqttMessage message = new MqttMessage(content.getBytes());message.setQos(qos);client.publish(pubTopic, message);System.out.println("Message published");Thread.sleep(10000);	// 因为断开连接EMQX那边就看不见连接了,所以sleep一会client.disconnect();System.out.println("Disconnected");client.close();System.exit(0);} catch (MqttException me) {System.out.println("reason " + me.getReasonCode());System.out.println("msg " + me.getMessage());System.out.println("loc " + me.getLocalizedMessage());System.out.println("cause " + me.getCause());System.out.println("excep " + me);me.printStackTrace();} catch (InterruptedException e) {throw new RuntimeException(e);}}
}

消费者类:

java">package com.itxhj.emqxdemo.io;import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;public class OnMessageCallback implements MqttCallback {public void connectionLost(Throwable cause) {// 连接丢失后,一般在这里面进行重连System.out.println("连接断开,可以做重连");}public void messageArrived(String topic, MqttMessage message) throws Exception {// subscribe后得到的消息会执行到这里面System.out.println("接收消息主题:" + topic);System.out.println("接收消息Qos:" + message.getQos());System.out.println("接收消息内容:" + new String(message.getPayload()));}public void deliveryComplete(IMqttDeliveryToken token) {System.out.println("deliveryComplete---------" + token.isComplete());}
}

3.3 测试

启动main方法后,看见这个表示成功
在这里插入图片描述
可以看见EMQX中也有连接显示

在这里插入图片描述


总结

总体的步骤如下:

  • 引入依赖:Eclipse Paho库
  • 编写生产者:配置了Broker地址、客户端ID、用户名和密码,成功连接后订阅了主题并发布了消息。
  • 编写消费者:实现消息回调,处理连接丢失和接收到的消息。
  • 启动项目测试:启动项目后在控制台和EMQX管理界面中查看了连接和消息的发送情况

PS:

感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个赞喔~


http://www.ppmy.cn/ops/122370.html

相关文章

57. QT中简单实现发布订阅机制

1. 说明 发布订阅机制可以说是一种消息通信的方式,用于构建分布式系统中不同组件之间的通信,MQTT就是利用这个模式实现的。具体的解释或说明,读者可以搜索一下MQTT的实现原理。本篇博客只是在自己的理解基础上,基于QT写了一个简单的版本:消息的发布和订阅只是简单的使用一…

yield:生成器 ----------------

yield&#xff1a;生成器 任何使用yield的函数都称之为生成器&#xff0c;如&#xff1a; def count(n):while n > 0:yield n #生成值&#xff1a;nn - 1另外一种说法&#xff1a;生成器就是一个返回迭代器的函数&#xff0c;与普通函数的区别是生成器包含yield语句&…

ACL(Access Control List)访问控制列表

目录 ACL 访问控制列表 ACL分类 ACL的组成 ACL匹配机制 ACL调用方式 实验配置 不允许PC1访问PC4 只允许PC1访问PC4 高级ACL 基本概念 实验配置 限制ping 实验配置 限制DNS 基于时间的ACL 实验配置 ACL 访问控制列表 根据一系列不同的规则&#xff0c;设备根据这…

QT调用最新的libusb库

一&#xff1a;下载libusb文件 下载最新的库的下载网站&#xff1a;https://libusb.info/ 下载&#xff1a; 解压后目录如下&#xff1a; 二&#xff1a;库文件添加QT中 根据自己的编译器选择库&#xff1a; ①将头文件中添加libusb.h ②源文件中添加libusb-1.0.lib ③添加…

商品详情接口使用方法和对接流程如下

商品详情接口的使用方法和对接流程通常涉及多个步骤&#xff0c;这些步骤可能因不同的电商平台而有所差异。以下是一个概括性的流程&#xff0c;适用于大多数电商平台&#xff08;如淘宝、京东、Lazada等&#xff09;的商品详情接口对接&#xff1a; 一、注册与认证 注册开发…

手写体识别毕设——人工智能和深度学习技术的快速发展

引言 研究背景 随着人工智能和深度学习技术的快速发展,手写体识别作为其中的一项重要应用,受到了广泛关注。手写体识别技术可以应用于教育、金融、医疗等多个领域,对于提高识别效率和准确性具有重要意义。

dockercommit 后的镜像没有数据

docker commit 后的镜像没有数据 docker commit load save mysql背景 工位机环境迁移MySQL时&#xff0c;使用commit》save》MySQL转移》load》run -p&#xff0c;使用数据库连接工具连接成功后&#xff0c;发现没有MySQL中没有库表等数据。 原因分析 直接搜&#xff0c;找…

实时语音交互,打造更加智能便捷的应用

随着人工智能和自然语言处理技术的进步&#xff0c;用户对智能化和便捷化应用的需求不断增加。语音交互技术以其直观的语音指令&#xff0c;革新了传统的手动输入方式&#xff0c;简化了用户操作&#xff0c;让应用变得更加易用和高效。 通过语音交互&#xff0c;用户可以在不…