Java 测试Mqtt协议通信

news2025/1/11 7:11:21

1. 启动ActiveMQ:

2. 安装jdk和eclipse

Jdk 官方下载:https://www.oracle.com/cn/java/technologies/downloads/

jdk安装测试:

 eclipse官方下载网站免安装版,解压缩就可以使用:

https://www.eclipse.org/downloads/packages/

3.下载Paho Mqtt的jar包:

Index of /repositories/paho/org/eclipse/paho/mqtt-client/0.4.1-SNAPSHOT

 4.打开eclipse,创建Java project,右击项目,添加路径libs,把上面下载的Paho Mqtt的jar包放进libs路径, Add external jar...

 

5.编写代码

   src源码路径添加两个class:MqttTest,MyMqtt,代码如下:

   MqttTest.java:

public class MyMqtt {

//Mqtt服务器地址,由于本地电脑,所以用本地回环地址作为服务器地址

private String host = "tcp://127.0.0.1:1883";

//登录ActiveMQ的账号信息

private String userName = "admin";

private String passWord = "admin";

//连接服务器的客户端实例client

private MqttClient client;

//存放订阅的主题

private MqttTopic mqttTopic;

//当前主题

private String myTopic = "Topics/htjs/serverToPhone";

//发送消息的主体

private MqttMessage message;

public MyMqtt(String id,MqttCallback callback,boolean cleanSession) {

// TODO Auto-generated constructor stub

try {

//配置连接属性

client = new MqttClient(host,id,new MemoryPersistence());

MqttConnectOptions options = new MqttConnectOptions();

options.setCleanSession(cleanSession);

options.setUserName(userName);

options.setPassword(passWord.toCharArray());

options.setConnectionTimeout(10);

options.setKeepAliveInterval(20);

//设置回调函数

if(callback == null) {

client.setCallback(new MqttCallback(){

@Override

public void connectionLost(Throwable arg0) {

// TODO Auto-generated method stub

System.out.println(id+"connectLost"+arg0);

}

@Override

public void deliveryComplete(IMqttDeliveryToken arg0) {

// TODO Auto-generated method stub

System.out.println(id+"deliveryComplete"+arg0);

}

@Override

public void messageArrived(String arg0, MqttMessage arg1) throws Exception {

// TODO Auto-generated method stub

System.out.println(id+"messageArrived"+arg1.toString());

}});

}else{

client.setCallback(callback);

}

//发起连接

client.connect(options);

}catch(MqttException e) {

e.printStackTrace();

}

}

//添加订阅信息的方法

public void subscribe(String[] topicFilters,int[] qos) {

try {

client.subscribe(topicFilters,qos);

} catch (MqttException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//添加发布消息的方法

public void sendMessage(String msg) {

sendMessage(myTopic,msg);

}

private void sendMessage(String topic, String msg) {

// TODO Auto-generated method stub

try {

message = new MqttMessage();

message.setQos(1);

message.setRetained(true);

message.setPayload(msg.getBytes());

mqttTopic = client.getTopic(topic);

//发布主题

MqttDeliveryToken token = mqttTopic.publish(message);

token.waitForCompletion();

} catch (MqttException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

  MyMqtt.java:

public class MqttTest {

private static String[] myTopics = {"Topics/Light/SwitchOn","Topics/Light/SwitchOff"};

private static int[] myQos = {2,2};

public static void main(String[] args) {

// TODO Auto-generated method stub

MyMqtt myMqtt = new MyMqtt("client",null,false);

myMqtt.subscribe(myTopics, myQos);

System.out.println("client start...");

}

}

6. 运行代码,注意这时候ActiveMQ是已经启动的!Java编写的id为client的客户端已经启动成功:

7.通信测试

下载Paho MQTT客户端程序(Paho):

Index of /repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.1.1

 解压缩,进入路径,启动paho客户端

 添加连接,输入本机1883的服务器地址,连接client客户端,订阅client发布的主题:Topics/htjs/serverToPhone,发布开灯的主题:Topics/Light/SwitchOn,发送的信息为:{value:80}:

打开eclipe项目,可以收到paho客户端刚才发过来的主题和信息:

8.总结

首先开启ActiveMQ服务器平台,用java编写client客户端,发布主题:Topics/htjs/serverToPhone,订阅主题:Topics/Light/SwitchOn,Topics/Light/SwitchOff,在打开paho客户端,连接client客户端,订阅主题:Topics/htjs/serverToPhone,发布主题和消息:Topics/Light/SwitchOn,{value:80},最后在client客户端收到信息80,网络架构如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【线条之美-让你发现不一样的美学:持续更新中...】

线条在程序中就是平淡无奇的一条带颜色的形状,天天看着也没有什么奇怪的,但是今天我带你发现不一样的线条,让你看完之后一定爱上线段美学,让你发现线段的奇妙之处,废话不多说,让我们来一起欣赏吧,持续更新中…

时序预测 | MATLAB实现BiLSTM时间序列未来多步预测

基本介绍 双向LSTM或biLSTMQ是一种序列处理模型,由两个LSTM组成:一个在前向接收输入,另个在后向接收输入。BiLSTMs有效地增加了网络可用的信息量。利用LSTM对句子进行建模还存在一个问题:无法编码从后到前的信息。在更细粒度的特征挖掘时缺乏能力,通过BiLSTM可以更好的捕…

CSS3 实现边框圆角渐变色渐变文字效果

.boder-txt {width: 80px;height: 30px; line-height: 30px;padding: 5px;text-align: center;border-radius: 10px;border: 6rpx solid transparent;background-clip: padding-box, border-box;background-origin: padding-box, border-box;/*第一个linear-gradient表示内填充…

企业级敏捷转型探索与实践︱极狐Gitlab战略运营部PMO郝韫

极狐Gitlab战略运营部PMO郝韫先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:企业级敏捷转型探索与实践。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 打造持续创新、快速成长的敏捷组织…

【Python笔记】Python + xlrd + pymysql读取excel文件数据并且将数据插入到MySQL数据库里面

这篇文章,主要介绍Python xlrd pymysql读取excel文件数据并且将数据插入到MySQL数据库里面。 目录 一、Python读取excel 1.1、安装xlrd库 1.2、打开excel工作簿 1.3、获取sheet工作表 1.4、操作row数据行 1.5、操作column数据列 1.6、操作单元格 二、读取…

AndroidStudio设计一个计算器

界面设计 activity_calcuator.xml 设计&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto&qu…

处理json 和HttpMessageConverterT

文章目录 简单处理json 和HttpMessageConverter<T>处理JSON-ResponseBody应用案例完成示意图代码应用 处理JSON-RequestBody应用案例说明代码实现 处理JSON-注意事项和细节应用实例:小结 HttpMessageConverter<T>基本说明工作机制简图处理JSON-底层实现(HttpMessag…

区块链挖矿的机制原理解析

什么是区块链挖矿&#xff1f; 全球大概有10亿台电脑随时保持运行的状态&#xff0c;但是它们的利用率只有20%&#xff0c;剩余的80%时间都在闲置状态&#xff0c;如果让它们成为云计算节点&#xff0c;在闲暇之余也能成为挖矿机&#xff0c;主人也可以无形中得到一份额外收益…

Ansys Zemax | 设计衍射光学元件(DOE)和超透镜(metalens)

在这篇文章中&#xff0c;我们简要介绍了使用 OpticStudio 设计衍射光学元件&#xff08;DOE&#xff09;和超透镜&#xff08;metalens&#xff09;的过程。我们讨论了相位面和局部光栅的概念。附件中还提供了一些有用的DLLs&#xff0c;以支持特殊的 DOE 或 metalens 设计方法…

windows C++多线程同步<2>-事件

windows C多线程同步&#xff1c;2&#xff1e;-事件 事件对象和关键代码段不同&#xff0c;它是属于内核对象&#xff1b;又分为人工重置事件对象和自动重置事件对象&#xff1b; 同一个线程不允许在不释放事件的情况下多次获取事件&#xff1b; 相关API 白话来讲&#xff1…

尚硅谷大数据项目《在线教育之采集系统》笔记001

视频地址&#xff1a;尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P004 P006 P007 P009 P010 P017 P025 P026 P027 P028 P030 P004 将数据以图形图表的方式展示出来&#xff01; P006 数据埋点 所谓埋点就是在应用中特定的流程收集一些信息&…

【Linux命令200例】cksum用于计算文件的校验和

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

[SSM]Spring IoC注解式开发

目录 十二、Spring IoC注解式开发 12.1回顾注解 12.1.1自定义注解 12.1.2使用注解 12.1.3通过反射机制读取注解 12.2声明Bean的注解 12.3Spring注解的使用 12.4选择性实例化Bean 12.5负责注入的注解 12.5.1Value 12.5.2Autowired与Qualifier 12.5.3Resource 12.6全…

Maven发布中央仓库始终报403

把域名 oss.sonatype.org 全部替换为&#xff1a;s01.oss.sonatype.org

Spring Cloud【SkyWalking服务环境搭建、微服务接入SkyWalking探针、Docker搭建Elasticsearch环境 】(十四)

目录 分布式请求链路追踪_SkyWalking服务环境搭建 分布式请求链路追踪_微服务接入SkyWalking探针 分布式请求链路追踪_Docker搭建Elasticsearch环境 分布式请求链路追踪_SkyWalking使用Elasticsearch持久化 分布式请求链路追踪_SkyWalking自定义链路追踪 分布式请求链路…

疲劳驾驶检测和识别3:Android实现疲劳驾驶检测和识别(含源码,可实时检测)

疲劳驾驶检测和识别3&#xff1a;Android实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 目录 疲劳驾驶检测和识别3&#xff1a;Android实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 1.疲劳驾驶检测和识别方法 2.人脸检测方法 3.疲劳驾驶检测和识别模型…

24 鼠标常用事件

鼠标进入&#xff1a;enterEvent鼠标离开&#xff1a;leaveEvent鼠标按下&#xff1a;mousePressEvent鼠标释放&#xff1a;mouseRelaseEvent鼠标移动&#xff1a;mouseMoveEvent 提升为自定义控件MyLabel 代码&#xff1a; //mylabel.h #ifndef MYLABEL_H #define MYLABEL_H#…

linux LVM磁盘管理

Linux运维过程中经常会遇到扩容的场景&#xff0c;下面做一点简单笔记&#xff0c;所谓好记性不如烂笔头。 1、新建磁盘挂载 &#xff08;1&#xff09;先看看主机上有没有挂载磁盘或挂载的磁盘有没有剩余的。 如下图可以看到这台机器挂了两个盘&#xff0c;一个/dev/sda,这…

【项目管理】第三节:PMP备考学习建议

文章目录 1.项目管理的价值观与方法论2.PMP开始的形式和题型 1.项目管理的价值观与方法论 对于中国考生而言&#xff0c;PMP”考试有两关要过:第一关是认知升级&#xff0c;考生通过学习和梳理项目管理知识&#xff0c;提升自己对项目管理的认知;第二关是思维升级&#xff0c;…

【Vue3】Vue3中的组合式API是什么?hook是什么?什么是“组合式函数”?项目中如何使用自定义 hook 函数?

组合式API与hook 一、什么是组合式 API&#xff1f;&#xff08;composition-api&#xff09;二、什么是组合式函数&#xff1f;&#xff08;hook&#xff09;2.1 无状态的函数&#xff08;utils&#xff09;2.2 有状态的函数&#xff08;hooks&#xff09;2.3 utils与hooks的联…