本篇记录一下MQTT服务器,客户端,JAVA客户端的选择开发与测试

MQTT服务端选择与安装过程;
MQTT客户端测试工具安装与测试;
MQTT JAVA客户端的选择与开发,测试


MQTT服务器选择与安装

目前主流的开源MQTT服务器主要是以下3个:
1) EMQX:github 4882 stars
2) Mosquitto:github 1645 stars
3) Apollo:ActiveMQ的升级版,github 109 stars

我们选择EMQX作为本次MQTT的服务器,首先去EMQ官网去下载EMQX安装版,截止目前最新版本已到V4.0.4

安装步骤请参考官网给出的帮助文档

按照官网操作无法启动服务,卡在emqx start看过来
  这步很坑的,一定要需要系统先安装好ERLANG开发环境,ERLANG跳转地址,可能是因为EMQX是用ERLANG来解释或开发的

安装启动完成后,如果是安装在本机,可以在浏览器中打开http://127.0.0.1:18083,输入默认用户名“admin”和默认密码“public”,能顺利进入管理控制台说明EMQX服务器安装完成。

MQTT客户端安装与测试

客户端测试工具建议使用MQTTBox

MQTTBox有两种使用的方式:一种为Chrome插件;另外一种为Windows程序安装。

1) Chrome插件直接去Chrome插件市场搜索mqttbox即可(需要FQ)
2) Windows安装包位置:点击下载

连接MQTT服务器:

参考下图设置连接服务器,协议选择mqtt/tcp ; Host端口为1883;
其它参数暂不影响测试,有兴趣自行研究。

成功连接服务器,Connected图标会显示为绿色

增加一个订阅者

订单topic为 "hello";Qos 为默认0

增加一个发布者

发布一个topic为"hello" 的一段消息{"hello":"world"},Qos默认为0

消息发布后,订阅者窗口马上会收到这段消息。至此,客户端测试就完成。

MQTT JAVA客户端开发与测试

JAVA客户端选择
EMQX SDK_TOOLS上罗列的几乎所有开发语言下的开源客户端工具。JAVA下的SDK目前主要有Eclipse Paho,Xenqtt,MeQanTT,mqtt-client。

因为Spring 的 Integration Endpoints去连接官方支持DEMO里面用的就是Eclipse Paho,所以本次JAVA客户端我们选择的也是Eclipse Paho .

POM引入

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

发布端开发示例

 1 import org.eclipse.paho.client.mqttv3.MqttClient;
2 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
3 import org.eclipse.paho.client.mqttv3.MqttException;
4 import org.eclipse.paho.client.mqttv3.MqttMessage;
5 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
6
7 /**
8 * 发布端未例
9 */
10 public class PublishSample {
11 public static void main(String[] args) {
12
13 String topic = "mqtt/okok";
14 String content = "hello 哈哈1";
15 int qos = 1;
16 String broker = "tcp://127.0.0.1:1883";
17 String userName = "test";
18 String password = "test";
19 String clientId = "pubClient1";
20 // 内存存储
21 MemoryPersistence persistence = new MemoryPersistence();
22
23 try {
24 // 创建客户端
25 MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
26 // 创建链接参数
27 MqttConnectOptions connOpts = new MqttConnectOptions();
28 // 在重新启动和重新连接时记住状态
29 connOpts.setCleanSession(false);
30 // 设置连接的用户名
31 connOpts.setUserName(userName);
32 connOpts.setPassword(password.toCharArray());
33 // 建立连接
34 sampleClient.connect(connOpts);
35 // 创建消息
36 MqttMessage message = new MqttMessage(content.getBytes());
37 // 设置消息的服务质量
38 message.setQos(qos);
39 // 发布消息
40 sampleClient.publish(topic, message);
41 // 断开连接
42 sampleClient.disconnect();
43 // 关闭客户端
44 sampleClient.close();
45 } catch (MqttException me) {
46 System.out.println("reason " + me.getReasonCode());
47 System.out.println("msg " + me.getMessage());
48 System.out.println("loc " + me.getLocalizedMessage());
49 System.out.println("cause " + me.getCause());
50 System.out.println("excep " + me);
51 me.printStackTrace();
52 }
53 }
54 }

订阅端发布实例

 1 import org.eclipse.paho.client.mqttv3.*;
2 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
3
4 /**
5 * 订阅端
6 */
7 public class SubscribeSample {
8 public static void main(String[] args) throws MqttException {
9 String HOST = "tcp://127.0.0.1:1883";
10 String TOPIC = "mqtt/okok";
11 int qos = 1;
12 String clientid = "subClient1";
13 String userName = "test";
14 String passWord = "test";
15 try {
16 // host为主机名,test为clientid即连接MQTT的客户端ID,一般以客户端唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
17 MqttClient client = new MqttClient(HOST, clientid, new MemoryPersistence());
18 // MQTT的连接设置
19 MqttConnectOptions options = new MqttConnectOptions();
20 // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
21 options.setCleanSession(true);
22 // 设置连接的用户名
23 options.setUserName(userName);
24 // 设置连接的密码
25 options.setPassword(passWord.toCharArray());
26 // 设置超时时间 单位为秒
27 options.setConnectionTimeout(10);
28 // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
29 options.setKeepAliveInterval(20);
30 // 设置回调函数
31 client.setCallback(new MqttCallback() {
32
33 @Override
34 public void connectionLost(Throwable cause) {
35 System.out.println("connectionLost");
36 }
37
38 @Override
39 public void messageArrived(String topic, MqttMessage message) throws Exception {
40 System.out.println("topic:"+topic);
41 System.out.println("Qos:"+message.getQos());
42 System.out.println("message content:"+new String(message.getPayload()));
43
44 }
45
46 @Override
47 public void deliveryComplete(IMqttDeliveryToken token) {
48 System.out.println("deliveryComplete---------"+ token.isComplete());
49 }
50
51 });
52 client.connect(options);
53 //订阅消息
54 client.subscribe(TOPIC, qos);
55 } catch (Exception e) {
56 e.printStackTrace();
57 }
58 }
59 }

下一篇:MQTT整合进Spring Mvc

更多参考网站:

1.EMQX帮助中心 https://docs.emqx.io/broker/latest/cn/
2.Spring MQTT Support https://docs.spring.io/spring-integration/docs/5.0.8.RELEASE/reference/html/mqtt.html

 

MQTT 2——服务端安装与客户端测试的更多相关文章

  1. TFS 2015服务端安装与客户端签入项目步骤

    一.参考如下3篇文章搭建TFS2015环境 1.参考文章如下: TFS 2015(Visual Studio Team Foundation Server)的下载和安装http://www.cnblo ...

  2. SVN--下载、安装VisualSVN server 服务端和 TortoiseSVN客户端

    前言: 在http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html的博客中已经很详细地介绍了SVN的服务器--VisualS ...

  3. svn服务端安装、权限修改以及客户端的使用

    2017-10-1016:10:2 svn服务端安装.权限修改以及客户端的使用 svn服务端.客户端.汉化包下载 http://pan.baidu.com/s/1c1Ogj2C 1.安装服务器端程序( ...

  4. git的CentOS服务端安装和windows客户端的使用

    git的CentOS服务端安装和windows客户端的使用 此教程以 搬瓦工vps CentOS 6 x64 的系统为环境,搭建 git 服务端.windows 7 系统为客户端. git客户端 在W ...

  5. NFS相关、NFS服务端安装配置、exportfs命令、nfs客户端的问题

    1.NFS (network file system,基于RPC协议) 2.NFS服务端安装配置安装服务端:yum install nfs-utils rpcbind -y安装客户端:yum inst ...

  6. 使用rsync在windows(服务端)与linux(客户端)之间同步

    说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...

  7. 开源入侵检测系统OSSEC搭建之一:服务端安装

    OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中.主要功能有日志分析.完整性检查.rootkit检测 ...

  8. Zabbix 3.4 服务端安装部署

    关于zabbix的安装部署官方也提供了详细的安装文档,链接如下: https://www.zabbix.com/download 选择zabbix的版本,服务器平台及使用的数据库 安装和配置zabbi ...

  9. 03-openldap服务端安装配置

    openldap服务端安装配置 阅读目录 基础环境准备 安装openldap服务端 初始化openldap配置 启动OpenLDAP 重新生成配置文件信息 规划OpenLDAP目录树组织架构 使用GU ...

随机推荐

  1. Jmeter- 笔记8 - 分布式

    分布式: 原因:在实际工作中,jmeter可能需要虚拟上千并发用户,而每台实际能虚拟的线程数时有限的,一般一台电脑小于2000个,1.5k - 2k可能就出现无法虚拟. 多台机器,一起虚拟并发用户数, ...

  2. THINKPHP_(7)_THINKPHP6的controller模型接收前端页面通过ajax返回的数据,会因为一个div而失败

    这个随笔比较短. 同样的前端页面代码,修改了一下,后端模型接收不到数据. 利用beyond compare软件比对两个前端文件, 发现多了一个</div>标签. 多了一个</div& ...

  3. Java面试题:==运算符与equals方法的区别

    据说这个面试题目,80%的程序员都会理直气壮的回答错误!! 一: ==运算符 如果比较的是基本数据类型,则直接比较数值是否相等,返回值为"true or false" 如果比较的是 ...

  4. 狂神说redis笔记(一)

    一.Nosql概述 1.单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用.随着用户增多,网站出现以下问题: 数据量增加到一定程度,单机数据库就放不下了 数据的索引(B+ ...

  5. Spring Security 快速上手

    Spring Security 框架简介 Spring Security 说明 Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案 关于安全方面的两 ...

  6. 如何使用 Python 统计分析 access 日志?

    一.前言 性能场景中的业务模型建立是性能测试工作中非常重要的一部分.而在我们真实的项目中,业务模型跟线上的业务模型不一样的情况实在是太多了.原因可能多种多样,这些原因大大降低了性能测试的价值. 今天的 ...

  7. 如何基于 String 实现同步锁?

    如何基于String实现同步锁? 在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理. 因为只有在相同字符串的情况下,并发操作才是不被允许的. ...

  8. 理解Spring:AOP的原理及手动实现

    引入 到目前为止,我们已经完成了简易的IOC和DI的功能,虽然相比如Spring来说肯定是非常简陋的,但是毕竟我们是为了理解原理的,也没必要一定要做一个和Spring一样的东西.到了现在并不能让我们松 ...

  9. 办公利器!用Python批量识别发票并录入到Excel表格

    辰哥今天来分享一篇办公干货文章:用Python批量识别发票并录入到Excel表格.对于财务专业等学生或者公司财务人员来说,将报账发票等汇总到excel简直就是一个折磨. 尤其是到年底的时候,公司的财务 ...

  10. 『无为则无心』Python基础 — 10、Python字符串的格式化输出

    目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...