Java原生结合MQTTX---完成心跳对话(附带源码)
简言:✨当Java遇上MQTT:打造会"隔空传话"的魔法程序✨
导语:想不想让两个Java程序像哈利波特里的双面镜一样实时对话?今天我们将用MQTT协议+EMQX,在Ubuntu上搭建一个魔法邮局,再亲手编写会传信的Java程序!gitCode平台
附赠【案例源码】🔥
源码地址:https://blog.csdn.net/huangzhe0701/article/details/145205822
参考文档:
- 在 Ubuntu 上安装 EMQX:https://docs.emqx.com/zh/emqx/latest/deploy/install-ubuntu.html
- MQTTX 下载:https://mqttx.app/zh/downloads
一、🛠️ 搭建魔法邮局(EMQX服务器)
扩展:在安装EMQX前记得先更新先软件包
apt update
1. 安装EMQX企业版
在Ubuntu终端输入以下咒语:
# 下载魔法卷轴(安装包)
wget https://www.emqx.com/zh/downloads/enterprise/5.9.0/emqx-enterprise-5.9.0-ubuntu24.04-amd64.deb
# 解开卷轴封印
sudo dpkg -i emqx-enterprise-5.9.0-ubuntu20.04-amd64.deb
# 启动邮局服务
sudo systemctl start emqx
2. 打开魔法管理台
浏览器访问 http://localhost:18083
,默认账号admin/public
,你将看到:
二、📱 准备第一个信使(MQTTX客户端)
安装MQTTX桌面版
安装地址:https://mqttx.app/zh/downloads
打开后新建连接:
- 名称:魔法邮箱_varin.cn
- 服务器:
varin:1883
三、⚡ 编写会魔法的Java程序
1. 添加咒语依赖(Maven)
<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.5</version>
</dependency>
2. MQTT连接核心代码
package cn.varin;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.persist.MemoryPersistence;
import org.junit.jupiter.api.Test;public class MqttConnectionTest {/***** String serverURI,(mqtt服务端地址)* String clientId,(客户端id)* MqttClientPersistence persistence(内存持久类)***/public static String serviceURL= "tcp://varin.cn:1883";public static String clientId="varya_test_01";public static MqttClient client;String user="varya";String password= "123456";static {try {// 建立一个mqqt客户端类client = new MqttClient(serviceURL,clientId,new MemoryPersistence());} catch (MqttException e) {throw new RuntimeException(e);}}// 创建mqtt连接@Testpublic void createConnectionTest() throws MqttException {MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();mqttConnectOptions.setUserName(user);mqttConnectOptions.setPassword(password.toCharArray());client.connect(mqttConnectOptions);
// 注意:因为用test类方法执行的话,太快,可能看不出来,是否正真的建立的连接,所以添加一个死循环来保持程序的存在。while (true);}}
2. MQTT发送消息
package cn.varin;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;
import org.junit.jupiter.api.Test;public class MqttSendMessageTest {/***** String serverURI,(mqtt服务端地址)* String clientId,(客户端id)* MqttClientPersistence persistence(内存持久类)***/public static String serviceURL= "tcp://varin.cn:1883";public static String clientId="varya_test_01";public static MqttClient client;public static String user="varya";public static String password= "123456";static {try {// 建立一个mqqt客户端类client = new MqttClient(serviceURL,clientId,new MemoryPersistence());MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();mqttConnectOptions.setUserName(user);mqttConnectOptions.setPassword(password.toCharArray());client.connect(mqttConnectOptions);} catch (MqttException e) {throw new RuntimeException(e);}}// 发送消息@Testpublic void SendMessageTest() throws MqttException {// 设置消息String message = "hello mqttx Client";MqttMessage mqttMessage = new MqttMessage(message.getBytes());mqttMessage.setQos(2);// 当一个主题的消息设置了 setRetained(true) 后,这条消息会存储在 Broker 中。如果后续有新的客户端订阅这个主题,则无论何时订阅,都会立即收到最近的一条带有 retained 属性的消息作为初始数据2。如果没有设置 retained 或者之前的消息未被保留,则新订阅者不会接收到任何历史消息。,mqttMessage.setRetained(true);// 发送消息client.publish("java_and_mqttx_conn", mqttMessage);//发送完,关闭连接client.disconnect();client.close();}}
3. MQTT接收消息
package cn.varin;import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.junit.jupiter.api.Test;public class MqttReceiveMessageTest {/***** String serverURI,(mqtt服务端地址)* String clientId,(客户端id)* MqttClientPersistence persistence(内存持久类)***/public static String serviceURL= "tcp://varin.cn:1883";public static String clientId="varya_test_01";public static MqttClient client;public static String user="varya";public static String password= "123456";static {try {// 建立一个mqqt客户端类client = new MqttClient(serviceURL,clientId,new MemoryPersistence());MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();mqttConnectOptions.setUserName(user);mqttConnectOptions.setPassword(password.toCharArray());client.connect(mqttConnectOptions);} catch (MqttException e) {throw new RuntimeException(e);}}// 接受消息@Testpublic void SendMessageTest() throws MqttException {client.subscribe("java_and_mqttx_conn",2);// 建立接收消息回调client.setCallback(new MqttCallback() {@Overridepublic void connectionLost(Throwable throwable) {// 连接丢失时调用System.out.println("cooection error");}@Overridepublic void messageArrived(String s, MqttMessage mqttMessage) throws Exception {// 接收到消息时调用System.out.println("来自主题:"+s);System.out.println("接收到的消息为:"+new String(mqttMessage.getPayload()));}@Overridepublic void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {// 解释消息结束时调用System.out.println("deliveryComplete");}});// 为了保持test类的连接,建立一个死循环语句while (true);}}
四、🐉 彩蛋:会喷火的测试恐龙
参考文章:https://blog.csdn.net/huangzhe0701/article/details/145205822
在终端运行:
mosquitto_pub -h localhost -t "java_and_mqttx_conn" -m "恐龙喷火啦~🔥"
观察Java程序是否输出火焰日志!
五、💡 常见魔法失效对策
- 检查1883端口是否被麻瓜防火墙阻挡
- 确认EMQX服务像打人柳一样活跃(
sudo systemctl status emqx
) - Java依赖是否像魔药材料一样齐全
结语:现在你的Java程序已经获得了通信魔法!快来用MQTT实现更多神奇功能吧~ 如果(程序)不显形,欢迎在评论区召唤帮忙!🎩
相关文章:
Java原生结合MQTTX---完成心跳对话(附带源码)
简言:✨当Java遇上MQTT:打造会"隔空传话"的魔法程序✨ 导语:想不想让两个Java程序像哈利波特里的双面镜一样实时对话?今天我们将用MQTT协议EMQX,在Ubuntu上搭建一个魔法邮局,再亲手编写会传信的…...
redis数据结构-06(LRANGE、LINDEX、LSET、LREM)
列表操作:LRANGE、LINDEX、LSET、LREM Redis 列表不仅仅是简单的数组;它们是一种强大的数据结构,可以高效地操作有序数据。本课将深入探讨使用 Redis 列表的四个基本命令: LRANGE 、 LINDEX 、 LSET 和 LREM 。掌握这些命令将使您…...
4.4 os模块
os模块: chdir:修改工作路径 --- 文件所在位置的标识 getcwd():返回当前路径,如果修改了则显示修改后的路径 curdir:获取当前目录的表示形式 cpu_count():返回当前cpu的线程数 getppid(): 获取当前进程编号 getppid():获取当前进程的父进…...
在 Windows 系统上选择与部署 DICOM 医学影像开发工具与库
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...
MYSQL数据库集群高可用和数据监控平台(详细版)
项目说明 概述 该项目共分为2个子项目,由MYSQL集群高可用和数据监控平台两部分组成 MYSQL集群高可用属于云原生高级课数据库运维部分的知识 数据监控平台属于云原生拔高项目,旨在让学生增加知识面,提高项目实习经历,充实简历 …...
学习通刷课稳定版(美化面板+完全免费)
学习通刷 (美化面板完全免费) 安装教程方法一源码文件 方法二 提示结尾 安装教程 方法一 我们首先在浏览器打开脚本猫网站并获取该插件(浏览器以Edge为例) 脚本猫首页:https://scriptcat.org/zh-CN/ 第一步ÿ…...
python 实现sha加密
在Python中,SHA(Secure Hash Algorithm)是一种加密哈希函数,通常用于生成数据的哈希值。SHA算法是单向的,这意味着它只能用于加密(生成哈希值),而不能用于解密。因此,SHA…...
Linux epoll 详解:概念、使用、数据结构、流程及应用
epoll是什么? epoll 是从 Linux 2.6 起,Linux内核提供的一种高性能I/O事件通知机制,用于解决传统 select 和 poll 在处理大量并发连接时遍历、最大数量限制、频繁拷贝数据等问题。epoll 可以用来监听多个文件描述符(socket、管道…...
Kubernetes排错(十一):lsof命令实战场景
在Kubernetes生产环境中,lsof作为Linux系统的"透视眼",是排查容器级疑难杂症的必备工具。本文将深入解析其在容器化场景下的高阶用法,助你快速定位隐藏问题。 一、基础环境准备 1. 容器内安装lsof # 临时进入容器安装࿰…...
Java基础语法之循环结构
循环结构 1.定义 控制一段代码重复执行多次 2.分类 2.1 for循环 2.1.1 定义 控制一段代码反复执行很多次。 2.1.2 for循环格式 for (初始化语句; 循环条件; 迭代语句) { 循环体语句(重复执行的代码); }示例 // 输出3次HelloWorld for (int i 0; i < 3; i) { System…...
冒泡排序的原理
冒泡排序是一种简单的排序算法,它通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来实现排序。具体原理如下: 冒泡排序的基本思想 冒泡排序的核心思想是通过相邻元素的比较和交换,将较大的元素逐步“冒泡”到列表的…...
AUTOSAR图解==>AUTOSAR_TR_InteractionWithBehavioralModels
AUTOSAR与行为模型交互详解 深入解析AUTOSAR软件组件与行为模型的交互关系与转换机制 目录 引言 1.1 AUTOSAR编辑工具概述 1.2 源起与目标 1.3 术语定义需求追溯AUTOSAR中行为建模的用例 3.1 软件组件的行为建模 3.2 软件组件描述到行为模型 3.3 行为模型到软件组件描述 3.4 组…...
GO语言内存管理结构
文章目录 1、内存分区1.1、栈(Stack)1.2、堆(Heap) 2、堆内存管理结构2.1、内存分配器(MCache → MArena → MSpan → MHeap)2.2、大小分类(Size Class)2.3、分配流程 3、垃圾回收&a…...
分享一些资料供大家学习
群里收集来的,自己感觉还是比较经典的,希望大家喜欢!!! 20250428 夸克网盘分享一大波经典IT架构好货20250429夸克网盘分享精品文档-管理咨询师必备的思维模型20250430夸克网盘分享清华大学DeepSeek教程又来了《文科生A…...
RAGMCP基本原理说明和相关问题解惑
一、RAG架构原理和局限性 1.1 概念解释 RAG(Retrieval-Augmented Generation):检索增强生成,让大模型接受外部输入后,总结输出 向量数据库:向量数据通常是高维空间中的点,代表复杂的数据结构…...
PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
前言: 大二小学期python课上基于pygame做的一个游戏小demo,当时老师花了一天讲解了下python基础语法后(也是整个大学四年唯一学习python的时间),便让我们自学网课一周然后交项目,所以做的非常仓促ÿ…...
Git标签
Git标签 1. 添加标签 使用 tag 命令可以给某次 commit 提交的版本打上标签,相当于这个 commit id 的别名,在实践中,会使用 v1.0 之类的标签提示这是正式版的第一个版本。 git tag v1.0 [commit id]缺省输入 commit id会给最新的一次提交打…...
USB学习【6】USB传输错误的处理
1.前言 我们从物理层到信号层,到协议层,他们分别在不同的层面完成不同的功能。 总结一下: 物理层实现了高低电平的检测。 信号层更进一步,通过一些方法,实现了二进制的传输。 协议层,因为可以二进制传输了…...
深入解析 Vision Transformer (ViT) 与其在计算机视觉中的应用
在近年来,深度学习尤其在计算机视觉领域取得了巨大的进展,而 Vision Transformer(ViT)作为一种新的视觉模型,它的表现甚至在许多任务中超过了传统的卷积神经网络(CNN),如 ResNet。在…...
《Go小技巧易错点100例》第三十一篇
本期分享: 1.Go struct内存对齐 2.使用空结构体(struct{})节省内存 Go struct内存对齐 在计算机系统中,CPU 访问内存时并不是逐字节读取的,而是以特定大小的块(通常为 4/8 字节)为单位进行读取。当数据的内存地址正…...
全栈项目实战:Vue3+Node.js开发博客系统
全栈项目实战:Vue3Node.js开发博客系统 一、项目架构设计 1. 技术栈选型 前端技术栈: Vue 3 Composition APITypeScriptPinia状态管理Vue Router 4Element Plus UI组件库Vite构建工具 后端技术栈: Node.js (Express/Koa)MongoDB (Mong…...
查看YOLO版本的三种方法
查看YOLO版本的三种方法: 一、通过命令行直接查询 使用Python交互式查询: from ultralytics import __version__ print(__version__) # 示例输出: 11.0.5二、检查PyTorch环境兼容性 import torch, ultralytics print(f"PyTorch: {torch.__versi…...
基于Docker的Bitwarden的私有本地部署
基于Docker的Bitwarden的私有本地部署 文章目录 基于Docker的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ ,连接不是很稳定,也没有安全感,所以我选择了…...
点和体素哪个好
3D 深度学习中基于体素和基于点云的方法哪种更优?-腾讯云开发者社区-腾讯云 https://zhuanlan.zhihu.com/p/372497398 GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection....
C++ STL编程 vector空间预留、vector高效删除、vector数据排序、vector代码练习
vector空间预留,作用是避免申请每次申请内存,提高运行效率。 对应的接口是 vector.reverse() vector的高效删除,对应的代码见下,一个时间复杂度是n,一个时间复杂度是1 #include<iostream> #include<vector…...
Android架构模式推荐及分析和MVC架构模式制作一个简单的底部tab切换
目录 主流架构模式对比 适用场景 MVP:团队协作开发,需要高可测试性的项目 MVC架构模式制作一个简单的底部tab切换 (Model-View-Controller)结构 代码 效果 主流架构模式对比 对比维度MVC MVP MVVM MVI 学习…...
【PVE】ProxmoxVE8虚拟机,存储管理(host磁盘扩容,qcow2/vmdk导入vm,vm磁盘导出与迁移等)
【PVE】ProxmoxVE8虚拟机,存储管理(host磁盘扩容,qcow2/vmdk导入vm,vm磁盘导出与迁移等) 文章目录 1、host 磁盘扩容2、qcow2/vmdk导入vm3、vm 磁盘导出与迁移 1、host 磁盘扩容 如何给host扩容磁盘,如增加…...
【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
功能说明: 基于JeecgBoot开源框架,JSwitch开关组件扩展,支持单个多选样式。 效果展示: 使用示例: {field: JSwitch,component: JSwitch,label: JSwitch,},{field: JSwitchCheckBox,component: JSwitch,label: JSwitch…...
卷积神经网络-从零开始构建一个卷积神经网络
目录 一、什么是卷积神经网络CNN 1.1、核心概念 1.2、卷积层 二、什么是卷积计算 2.1、卷积计算的例子: 2.2、点积 2.3、卷积与点积的关系 2.4、Padding(填充) 2.4.1、Padding的主要作用 1、控制输出特征图尺寸 2、保留边缘信息 3. 支持深层网络训练 2.4.2、Str…...
Linux 常用命令集合
以下是一份 Linux 常用命令集合,涵盖文件操作、系统管理、网络管理、权限管理、进程管理等常见任务,并附上代码示例: 1. 文件与目录操作 命令作用示例ls列出目录内容ls -l(详细列表) ls -a(显示隐藏文件&a…...
STM32f103 标准库 零基础学习之按键点灯(不涉及中断)
注意,此次代码不涉及中断,不涉及中断,不涉及中断 目录 1.初始化LED 2.初始化按键 3.粗略的延时函数 4.判断引脚电平 5.通过异或反转电平 开始 │ ├── 初始化LED(GPIOA Pin1 推挽输出) ├── 初始化按键&…...
【c++】【数据结构】二叉搜索树详解
目录 二叉搜索树的定义二叉搜索树的模拟实现查找函数循环版递归版 插入函数循环版递归版 删除函数循环版递归版 二叉搜索树的定义 二叉搜索树是一种特别的二叉树,是二叉树的搜索特化版。学过排序的都知道,在数组有序的情况下二分查找可以以极高的频率找…...
高精地图数据错误的侵权责任认定与应对之道
首席数据官高鹏律师团队 在自动驾驶与智慧交通快速发展的今天,高精地图作为核心基础设施,其数据准确性直接关系到公共安全。然而,技术并非完美,一旦因地图数据错误导致事故或损失,比如当自动驾驶汽车因高精地图数据错…...
Python训练营打卡——DAY22(2025.5.11)
复习日 学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 泰坦尼克号——来自灾难的机器学习 数据来源: kaggle泰坦里克号人员生还预测 挑战 泰坦尼克号沉没是历史上最臭名昭著的海难之一。 1912年4月15日,在被普…...
【计算机视觉】OpenCV实战项目 :Image_Cartooning_Web_App:基于深度学习的图像卡通化
Image_Cartooning_Web_App:基于深度学习的图像卡通化Web应用深度解析 1. 项目概述2. 技术原理与模型架构2.1 核心算法2.2 系统架构 3. 实战部署指南3.1 环境配置3.2 模型部署3.3 处理流程示例 4. 常见问题与解决方案4.1 模型加载失败4.2 显存溢出4.3 边缘伪影 5. 关…...
王道计算机网络知识点总结
计算机网络知识点总结 一、计算机网络体系结构 (一)计算机网络概述 计算机网络概念:互连的、自治的计算机系统的集合,目的是资源共享,组成包括多台自治计算机,规则是网络协议。 计算机网络的组成&#…...
Java学习笔记(对象)
一、对象本质 状态(State):通过成员变量(Field)描述 行为(Behavior):通过成员方法(Method)实现 class Person {String name;int age;void eat() {System.o…...
并发笔记-给数据上锁(二)
文章目录 核心挑战 (The CRUX)29.1 并发计数器 (Concurrent Counters)1. 简单非并发计数器 (Figure 29.1)2. 同步计数器(单锁版本 - Coarse-Grained Lock, Figure 29.2)3. 可伸缩计数:近似/懒惰计数器 (Approximate/Sloppy Counter, Figure 2…...
Three.js + React 实战系列 - 页脚区域 Footer 组件 ✨
对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦!!谢谢大家!!! 为个人主页画上完美句号:设计一个美观实用的页脚组件 在完成 Hero、About、Projects、Contact 等模块后,我们为整个页面添上…...
基于Flask、Bootstrap及深度学习的水库智能监测分析平台
基于Flask、Bootstrap及深度学习的水库智能监测分析平台 项目介绍 本项目是基于Flask框架构建的水库智能监测分析平台,集水库数据管理、实时监测预警、可视化分析和智能预测功能于一体。 预测水位的预警级别:蓝色预警没有超过正常水位且接近正常水位1米…...
JavaSE核心知识点02面向对象编程02-08(异常处理)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-08&#…...
7系列 之 SelectIO 资源
背景 《ug471_7Series_SelectIO.pdf》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性,并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resource…...
【目标检测系列】YOLOV1解读
目标检测系列文章 目录 目标检测系列文章📄 论文标题🧠 论文逻辑梳理1. 引言部分梳理 (动机与思想) 📝 三句话总结🔍 方法逻辑梳理🚀 关键创新点🔗 方法流程图关键疑问解答Q1: 关于 YOLOv1 中的 "conf…...
GIF图像技术介绍
以下是对GIF格式的详细介绍,涵盖其定义、发展历程、技术特性、应用场景及与其他格式的对比: 一、GIF的定义与起源 GIF(Graphics Interchange Format,图形交换格式)由美国CompuServe公司于1987年推出,旨在解决早期互联网带宽不足的问题。其开发者Steve Wilhite采用LZW无损…...
【TI MSPM0】CCS工程管理
一、关于WORKSPACE 1.导入工程路径 导入工程时,实际是将工程从原路径复制到了Workspace路径下(默认是在C盘user路径下) 2.工程保存备份 关于工程的保存,可以右击文件夹,点击Reveal打开文件夹 将对应的文件夹进行复…...
牛客周赛 Round 92-题解
牛客周赛 Round 92-题解 A-小红的签到题 code #include<iostream> #include<string> using namespace std; string s; int main() {int n;cin >> n;cout << "a_";for (int i 0; i < n - 2; i )cout << b;return 0; }B-小红的模…...
iVX 图形化编程平台:结合 AI 原生开发的革新与实践
一、技术架构:重构 AI 与编程的交互逻辑 1. 信息密度革命:从线性代码到图形化语义单元 传统文本编程存在显著的信息密度瓶颈。以 "按钮点击→条件判断→调用接口→弹窗反馈" 流程为例,Python 实现需定义函数、处理缩进并编写 30 …...
微服务架构中如何保证服务间通讯的安全
在微服务架构中,保证服务间通信的安全至关重要。服务间的通信通常是通过HTTP、gRPC、消息队列等方式实现的,而这些通信链路可能面临多种安全风险。为了应对这些风险,可以采取多种措施来保证通信安全。 常见的服务间通信风险 1.数据泄露:在服务间通信过程中,敏感数据可能会…...
长短期记忆网络(LSTM)深度解析:从理论到实践的全方位指南
一、LSTM基础理论:超越传统RNN的记忆架构 1.1 RNN的长期依赖问题 传统循环神经网络(RNN)在处理长序列时面临的根本挑战是梯度消失/爆炸问题。当序列长度超过10-20个时间步时,RNN难以学习到早期时间步的信息。数学上,这源于反向传播过程中梯度的链式法则: 复制 下载 ∂…...
FramePack AI图片生成视频 v1.1 整合包
今天,我兴奋地要为大家介绍一款革命性的AI工具——FramePack,这是一个让人眼前一亮的图生视频整合包。想象一下,在2025年5月11日的今天,哪怕你的电脑显存仅有6G,你也可以轻松创造艺术! FramePack的神奇之处…...