mqtt 客户端和服务端搭建及基本使用详解

简介:主要介绍mqtt客户端的测试工具的使用,及服务端的搭建步骤,技术选型等。客户端测试工具使用MQTTX。服务端使用emqx中间件进行部署及发布。以及emqx服务端如何进行配置。以及MQTTX如何与服务端进行建立连接和通信。

下载MQTTX客户端

下载地址:http//mqttx.app/
如下图:
在这里插入图片描述

服务端emqx搭建:linux环境下部署

说明:操作系统centos7

安装方式: rpm 安装

cpu架构:amd64

命令下载emqx 执行如下命令:
wget https://www.emqx.com/zh/downloads/broker/4.4.1/emqx-4.4.1-otp24.1.5-3-el7-amd64.rpm

安装执行如下命令:
sudo yum install emqx-4.4.1-otp24.1.5-3-el7-amd64.rpm

运行及启动执行如下命令:
sudo emqx start

查看启动状态执行如下命令:
emqx_ctl status

如果出现如下结果,则认为启动成功,如下命令列表

$ emqx start
emqx v4.0.0 is started successfully!
$ emqx_ctl status
Node ‘emqx@127.0.0.1’ is started emqx 4.0.0 is running

在这里插入图片描述
这种安装方式可能会报依赖错误如:

错误:Please make sure openssl-1.1.1 (libcrypto) and libncurses are installed.Also ensure it’s running on the correct platform,this EMQ X release is built for 23.2.7.2-emqx-3-x86_64-unknown-linux-gnu-64-centos7
解决办法:这是因为缺少依赖包:缺少 openssl1.1.1

安装并编译: openssl
cd /usr/local/src/
下载wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar xf openssl-1.1.1d.tar.gz
编译
cd openssl-1.1.1d
./config
make && make install
安装完成后 路径:/usr/local/bin

安装完成后即可正常启动emqx

注意的问题

客户端连接时一直连接不上原因是没有关掉防火墙,这种问题:主机windows能ping通无法访问虚拟机Linux中tomcat服务,这种问题一般都是由防火墙过滤了端口导致的。)

修改Linux系统防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,如果要开放哪个端口,在里面添加一行

-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

就可以了,其中 8080 是要开放的端口号,然后service iptables restart 重新启动linux的防火墙服务就可以了

emqx服务端支持多种协议:

1、ws :即websocket。

2、tcp协议

3、mqtt协议

服务端默认配置,可查看服务端配置文件。配置文件所在路径:
/etc/emqx/emqx.conf
查看配置文件
可以发现有3个默认端口号:8083 为websocket默认端口、18083为管理控制台端口(默认用户名密码:admin/public)1883为tcp端口。如下图所示
在这里插入图片描述
在这里插入图片描述
管理控制台登录界面:访问地址:ip:18083。如果访问不到一定要记得关掉防火墙或添加端口。
在这里插入图片描述
上述一切准备就绪后,开始使用客户端工具mqttx与服务端建立连接,mqttx既能发布消息也能订阅消息。如下图所示
在这里插入图片描述
发布与订阅

在这里插入图片描述

好的,以下是使用Java编写MQTT客户端服务端示例的代码: MQTT客户端示例: import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MqttClientExample { public static void main(String[] args) { String topic = "MQTT Examples"; String content = "Message from MqttPublishSample"; int qos = 2; String broker = "tcp://iot.eclipse.org:1883"; String clientId = "JavaSample"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttClient sampleClient = new MqttClient(broker, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); System.out.println("Connecting to broker: " + broker); sampleClient.connect(connOpts); System.out.println("Connected"); System.out.println("Publishing message: " + content); MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qos); sampleClient.publish(topic, message); System.out.println("Message published"); sampleClient.disconnect(); System.out.println("Disconnected"); 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(); } } } MQTT服务端示例: import org.eclipse.paho.server.mqttv3.*; import org.eclipse.paho.server.mqttv3.persist.MemoryPersistence; public class MqttServerExample { public static void main(String[] args) { int qos = 2; String broker = "tcp://iot.eclipse.org:1883"; String clientId = "JavaServer"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttServerPersistence serverPersistence = new MemoryPersistence(); MqttServer server = new MqttServer(broker, clientId, serverPersistence); server.start(); System.out.println("Server started"); MqttServerMessageHandler handler = new MqttServerMessageHandler() { @Override public void handleMessage(String topic, MqttMessage message) throws Exception { System.out.println("Received message: " + message.toString() + " on topic: " + topic); } }; server.subscribe("MQTT Examples", qos, handler); System.out.println("Subscribed to topic: MQTT Examples"); Thread.sleep(5000); server.unsubscribe("MQTT Examples"); System.out.println("Unsubscribed from topic: MQTT Examples"); server.stop(); System.out.println("Server stopped"); } 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) { e.printStackTrace(); } } } 希望这些代码能够帮助你!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

senda66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值