当前位置:   article > 正文

Ubuntu 搭建MQTT服务器_ubuntu搭建mqtt服务器

ubuntu搭建mqtt服务器

安装步骤
1.引入库
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa


2.安装
sudo apt-get update 
sudo apt-get install mosquitto


3.安装客户端
sudo apt-get install mosquitto-clients 

添加账户及密码
sudo mosquitto_passwd -c /etc/mosquitto/pwfile.txt 用户名

回车后连续输入2次用户密码即可

3.启动mosquitto
sudo service mosquitto start

4.查看mosquitto运行状态
sudo service mosquitto status

运行测试
1.mosquitto-clients 运行测试
订阅主题(终端1)

mosquitto_sub -h localhost -t "lai001/#" -u 用户名 -P 密码 -i “client1”

发布主题(终端2)

mosquitto_pub -h localhost -t "lai001/testTopic" -u 用户名 -P 密码 -m "Hello MQTT from mosquitto-clients"

查看运行状态

systemctl status mosquitto

重启服务器程序

查看运行进程号:ps -aux | grep mosquitto

压力测试工具emqtt

.emqtt下载地址:http://emqtt.com/downloads,找到自己要下载的版本信息,注意开发版、稳定版;

2.下载后放到硬盘根目录,进入下载路径目录,cmd进入dos窗口,如下图:

3.输入.\bin\emqttd consloe,之后弹出启动状态页面,代表启动成功;

4.登录:地址 :http://localhost:18083/ 

              用户名为:admin   密码为:public

登录上去就可以看服务器的运行状态了。

测试
依赖

 
  1. <dependency>

  2. <groupId>org.eclipse.paho</groupId>

  3. <artifactId>org.eclipse.paho.client.mqttv3</artifactId>

  4. <version>1.0.2</version>

  5. </dependency>

Server

 
  1. package com.mymqtt.myemqtt;

  2. import java.util.Scanner;

  3. import org.eclipse.paho.client.mqttv3.MqttClient;

  4. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

  5. import org.eclipse.paho.client.mqttv3.MqttMessage;

  6. public class Server {

  7. public static void main(String[] args) throws Exception {

  8. String host = "tcp://127.0.0.1:1883";

  9. String topic = "hello";

  10. String clientId = "server";// clientId不能重复

  11. MqttConnectOptions options = new MqttConnectOptions();

  12. options.setCleanSession(true);

  13. MqttClient client = new MqttClient(host, clientId);

  14. client.connect(options);

  15. MqttMessage message = new MqttMessage();

  16. @SuppressWarnings("resource")

  17. Scanner scanner = new Scanner(System.in);

  18. System.out.println("请输入要发送的内容:");

  19. while (true) {

  20. String line = scanner.nextLine();

  21. message.setPayload(line.getBytes());

  22. client.publish(topic, message);

  23. }

  24. }

  25. }

Client

 
  1. package com.mymqtt.myemqtt;

  2. import org.eclipse.paho.client.mqttv3.MqttClient;

  3. import org.eclipse.paho.client.mqttv3.MqttConnectOptions;

  4. public class Client {

  5. public static void main(String[] args) throws Exception {

  6. String host = "tcp://127.0.0.1:1883";

  7. String topic = "hello";

  8. String clientId = "12345";// clientId不能重复

  9. // 1.设置mqtt连接属性

  10. MqttConnectOptions options = new MqttConnectOptions();

  11. options.setCleanSession(true);

  12. // 2.实例化mqtt客户端

  13. MqttClient client = new MqttClient(host, clientId);

  14. // 3.连接

  15. client.connect(options);

  16. client.setCallback(new PushCallback());

  17. while (true) {

  18. client.subscribe(topic, 2);

  19. }

  20. // client.disconnect();

  21. }

  22. }

PushCallback

 
  1. package com.mymqtt.myemqtt;

  2. import java.util.Date;

  3. import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;

  4. import org.eclipse.paho.client.mqttv3.MqttCallback;

  5. import org.eclipse.paho.client.mqttv3.MqttMessage;

  6. import org.slf4j.Logger;

  7. import org.slf4j.LoggerFactory;

  8. public class PushCallback implements MqttCallback {

  9. private final Logger logger = LoggerFactory.getLogger(this.getClass());

  10. public void connectionLost(Throwable cause) {

  11. // 连接丢失后,一般在这里面进行重连

  12. System.out.println("连接断开,可以做重连");

  13. logger.info("掉线时间:{}", new Date());

  14. }

  15. public void deliveryComplete(IMqttDeliveryToken token) {

  16. System.out.println("deliveryComplete---------" + token.isComplete());

  17. }

  18. public void messageArrived(String topic, MqttMessage message) throws Exception {

  19. // subscribe后得到的消息会执行到这里面

  20. // System.out.println(message);

  21. System.out.println("接收消息主题 : " + topic);

  22. System.out.println("接收消息Qos : " + message.getQos());

  23. System.out.println("接收消息内容 : " + new String(message.getPayload()));

  24. }

  25. }

结果:

控制台显示

两个连接

è¿éåå¾çæè¿°

参考资料:http://emqtt.com/

mosquitto_pub
d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为localhost
-i 指定要给哪个clientId的用户发送消息
-I 指定给哪个clientId前缀的用户发送消息
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定QoS的值(0,1,2)
-t 指定topic
-u 指定broker访问用户
-P 指定broker访问密码
-V 指定MQTT协议版本
--will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
--will-topic 用户发送Will消息的topic

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/176401
推荐阅读
相关标签
  

闽ICP备14008679号