mqtt java_MQTT和Java入门

mqtt java

MQTT(MQ遥测传输)是一种轻量级的发布/订阅消息传递协议。 MQTT在物联网应用程序中得到了广泛使用,因为它被设计为在占用空间小的系统上运行在远程位置。

MQTT 3.1是OASIS标准,您可以在http://mqtt.org/上找到所有信息。

本文将指导您完成运行第一个MQTT应用程序的各个步骤:

  1. 安装并启动MQTT代理
  2. 编写一个发布消息的应用程序
  3. 编写使用消息的应用程序

GitHub上提供了示例应用程序的源代码。

先决条件

  • Apache Maven 3.x
  • 吉特

安装并启动MQTT代理

您可以找到许多MQTT经纪人,在本示例中,我将使用最常见的经纪人之一Mosquitto 。

您可以从二进制软件包下载并安装。 我已经使用Homebrew在Mac上安装了它:

$ brew install mosquitto

使用默认配置启动MQTT Broker

$ /usr/local/sbin/mosquitto

发布和使用消息

打开两个终端窗口,然后运行以下命令:

消耗

$ mosquitto_sub -h 127.0.0.1 -t iot_data

发布

$ mosquitto_pub -h 127.0.0.1 -t iot_data -m "Hello world"

您应该在消费者/订户窗口中看到消息Hello world

编写您的第一个MQTT应用程序

在此示例中,我将编写一个小型Java应用程序,因为这是我在全局项目中使用的语言。

Maven依赖

将Eclipse Paho依赖项添加到您的Maven项目中

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

发布消息

发布消息非常容易,创建一个MqttClient并将其用于发布主题。

MqttClient client = new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
client.connect();
MqttMessage message = new MqttMessage();
message.setPayload("Hello world from Java".getBytes());
client.publish("iot_data", message);
client.disconnect();

您还有许多其他选项和配置,可以在发布消息时使用,例如安全性,服务质量(QoS)等。 但是在这篇文章中,我只想简单地展示发布和使用MQTT消息有多么容易。

消费信息

要使用消息,您需要实现org.eclipse.paho.client.mqttv3.MqttCallback ,它将接收消息并在Subscriber应用程序的MqttClient中使用了此Callback类。

回调类:

public class SimpleMqttCallBack implements MqttCallback {public void connectionLost(Throwable throwable) {System.out.println("Connection to MQTT broker lost!");}public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {System.out.println("Message received:\n\t"+ new String(mqttMessage.getPayload()) );}public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {// not used in this example}
}

在订阅服务器应用程序中使用此回调类,如下所示:

MqttClient client=new MqttClient("tcp://localhost:1883", MqttClient.generateClientId());
client.setCallback( new SimpleMqttCallBack() );
client.connect();

就像对于发布者一样,我正在使用没有任何选择(QoS,安全性)的代理和客户端。

生成并运行应用程序

1-获取示例代码

从GitHub克隆项目

$ git clone https://github.com/tgrall/mqtt-sample-java.git

2-使用Apache Maven构建项目:

这个项目是一个简单的Java应用程序,它使用Eclipse Paho库运行发布者和订阅者。

$ mvn clean package

为了方便起见,示例程序项目被设置为使maven包目标生成单个可执行文件/mqtt-sample ,其中包括所有示例程序和依赖项。

3-运行订阅服务器

订阅者将接收并打印在iot_data主题上发布的所有消息。

$ ./target/mqtt-sample subscriber

4-运行发布者

使用以下命令运行发布者,第二个参数是要发布的消息

$ ./target/mqtt-sample publisher "My first MQTT message..."

结论

在本文中,您学习了如何:

  • 安装并启动MQTT经纪人Mosquitto
  • 创建用Java开发的发布者和订阅者

选择本文非常简单,可以快速运行您的第一个MQTT应用程序。 我写这篇文章是我正在从事的全球物联网项目的一部分,该项目将捕获设备数据,并使用MQTT和MapR Streams将它们发布到MapR融合数据平台中。 这就是为什么我在应用程序中使用Java。 您可以使用任何MQTT客户端库来构建发布者和订阅者。

翻译自: https://www.javacodegeeks.com/2017/01/getting-started-mqtt-java.html

mqtt java

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

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

相关文章

iphone11什么时候上市_hd3手表高仿哪里买 什么时候上市?

hd3手表高仿哪里买 什么时候上市? 导读&#xff1a;hd3手表高仿哪里买zf的万国7日链高仿表怎么样&#xff1f;款式设计非常出色&#xff0c;很多手表的款式&#xff0c;依靠着该性价比的迅速提升来做出的有效转化&#xff0c;年轻人对于复刻表的选择&#xff0c;能拥有的这些细…

arcgis工具python源码_面向Arcgis的python脚本编程_数据

【实例简介】《面向ArcGIS的Python脚本编程》是一本指导ArcGIS for Desktop专业用户进行Python开发的指南。该书将教会您如何通过编写Python代码处理空间数据并在ArcGIS中自动化实现地理处理任务【实例截图】【核心代码】面向arcgis的python脚本编程数据└── 面向arcgis的pyt…

Windows 命令终端(CMD)程序员常用的命令

文章目录certutilcddirmd/mkdirrddelreplacechdir/cdattribhelptypemorefindstrrename/renset环境变量扩展echonetstattskilltasklisttaskkillnettreecopystartpauseprintverwinversysteminfowmiclogofftracertroute printtelnetftppingipconfigshutdown远程关机formatchkdskti…

驱动级的自动按键_空调遥控器特殊按键使用方法及注意事项

在上门维修过程中&#xff0c;用户常常由于遥控器使用不当&#xff0c;或者幵启了特定按键引起空调器的假性故障&#xff0c;这时需要进行电话解答或上门讲解&#xff0c;现对空调遥控器的特殊功能按键作简单介绍。示例遥控器型号为格力YAD0F,与KFR-23GW/ ( 23570 ) Aa-3挂式空…

净资产滚动率_净资产的结构

净资产滚动率Netty的包装结构很棒。 每个程序员都应该研究它。 每个系统都应该模仿它&#xff1b; 每个项目经理都应将其打印出来&#xff0c;拍在墙上&#xff0c;然后对开发人员说&#xff1a;“那样。” Netty是一个“ ...异步事件驱动的网络应用程序框架&#xff0c;用于…

freebsd nginx php mysql_FreeBSD 安装配置Nginx+PHP+APC+MySQL

在 FreeBSD 下安装软件的传统方法是用 ports 源码安装&#xff0c;不过使用 ports 源码编译安装太耗时(尤其是各种库依赖多、大的时候)&#xff0c;个人还是喜欢 pkg 这种软件包管理工具直接安装编译好的二进制软件包&#xff0c;不用自己编译&#xff0c;省时省力。FreeBSD 也…

python入门之类的基础语法-关于一些Python的一些基础语法训练

1&#xff1a;已知a和b元素 a "pyer" b "apple" 用字典和format方法实现&#xff1a;效果&#xff1a;my name is pyer, i love apple. 1、format的方法 c "mysql name is {0},i love {1}".format("pyer","apple") 用字典…

jdk 9和jdk8_JDK 9已完成功能!

jdk 9和jdk8今天的Mark Reinhold消息JDK 9已完成功能完善-现在该降级了 &#xff0c; 它宣布JDK 9的“总体功能集已冻结”。 OracleJava平台小组的首席架构师Reinhold补充说&#xff1a;“极不可能将任何进一步的JEP定向到该发行版。” 与该消息类似的文本也出现在JDK 9页面上 …

Java从键盘输入若干数_用java编程序:从键盘输入若干个整数,输出这些数中大于其平均值的数。...

展开全部引用1楼 christal yhy的答案,考虑到浮点数的存在,特在此基础上优化一下,代码如下:public static void main(String[] args) {Scanner scan new Scanner(System.in);System.out.println("请输入62616964757a686964616fe59b9ee7ad9431333262373933要输入的个数:&qu…

java多线程编程_阿里P8熬到秃头肝出来的:Java多线程+并发编程核心笔记

自学Java的时候&#xff0c;多线程和并发这一块可以说是最难掌握的部分了&#xff0c;很多小伙伴表示需要一些易于学习和上手的资料。所以今天这本「Java并发学习手册.pdf」就是一份集中学习多线程和并发的手册&#xff0c;PDF版&#xff0c;由RedSpider社区的五位大神撰写&…

内外网逻辑隔离物理隔离_隔离域逻辑

内外网逻辑隔离物理隔离在一个设计模式课程中&#xff0c;我对建模域逻辑进行了有趣的讨论。 具体来说&#xff0c;它是关于隔离域逻辑的 。 一个应用程序通常分为三个部分&#xff1a; 演示&#xff08;例如桌面GUI&#xff0c;浏览器&#xff0c;Web服务&#xff09; 域逻辑…

360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...

在日常工作中&#xff0c;我们经常碰到网页不兼容的问题。我们之所以要做兼容性测试&#xff0c;目的在于保证待测试项目在不同的操作系统平台上正常运行。主要包括待测试项目能在同一操作系统平台的不同版本上正常运行&#xff1b;待测试项目能与相关的其他软件或系统的“和平…

Linux 的命令终端(CMD)的快捷键(Keyboard of MacBook)

文章目录常用移动光标编辑命令查找历史命令控制命令命令终端界面滚屏命令终端页签切换奇葩常用 快捷键说明Ctrl A光标跳到本行的行首Ctrl E光标跳到本行的行尾Ctrl U删除当前光标前面的所有文字&#xff08;还有剪切功能&#xff09;Ctrl K删除当前光标后面的所有文字&…

instanceof_您真的需要instanceof吗?

instanceof使用instanceof是一种代码味道。 我认为我们可能对此表示同意。 每当我看到这样的构造时&#xff0c;我都会确定出现了问题。 也许有人只是在进行更改时没有注意到问题&#xff1f; 也许有一个主意&#xff0c;但是它太复杂了&#xff0c;以至于需要太多的精力或时间…

HTML 中的节点、元素、标签、标记的区别

文章目录一、HTML 节点&#xff08;一&#xff09;节点的类型二、HTML 标签三、HTML 元素&#xff08;一&#xff09;HTML 元素属性&#xff08;二&#xff09;HTML 元素的嵌套一、HTML 节点 节点&#xff08;node&#xff09;是构成我们网页的最基本的组成部分&#xff0c;网…

java查题小程序_求助大神来写一个java的小程序,题目如下

货不多说直接代码public class car {private String car_number;private float car_price;private float rebate;//折扣public float getRebate() {return rebate;}public void setRebate(float rebate) {this.rebate rebate;}public String getCar_number() {return car_numb…

valhalla 插件_Valhalla项目的价值

valhalla 插件我对Valhalla项目的进度一直很感兴趣&#xff0c;但是Brian Goetz最近的信息“ Valhalla项目&#xff1a;目标 ”提高了我的兴趣。 我经常喜欢Goetz的作品&#xff0c;因为他结合了我最想成为技术作者的两个特征&#xff1a;他比他所写的内容更了解他所写的主题&a…

cpu占用100_Java项目服务器cpu占用100%解决办法

1、使用命令top查看cpu进程&#xff0c;发现tomcat占用cpu使用率过高可以看到服务器负载很高&#xff0c;tomcat CPU使用已达到接近300%,内存20%。2、把进程的栈dump到文件里&#xff0c;以便后面的分析jstack 22764 > cpu0827.log 3、看看这个进程里面哪些线程在占用cputop…

MySQL 获取系统时间/系统日期/日期时间的函数

文章目录一、获取当前系统日期和时间&#xff08;一&#xff09;now()&#xff0c;返回当前的系统日期和时间&#xff08;二&#xff09;sysdate()&#xff0c;返回当前的系统日期和时间&#xff08;三&#xff09;current_timestamp()&#xff0c;返回当前的系统日期和时间&am…

java人种_实在看不出藏族有大量矮黑血统

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼人种混合的存在提醒了研究远东地区的人类学家。在远东&#xff0c;特别是东南亚&#xff0c;棕色人种和黄色人种错综而居&#xff0c;有些群体更似乎兼有两方的特征&#xff0c;很难判定。这种格局究竟是不是混血&#xff0c;还是其…