linux下 下载:

wget https://www.emqx.io/downloads/broker/v3.2.1/emqx-centos7-v3.2.1.zip

解压:unzip emqx-centos7-v3.2.1.zip

启动:./emqx start

配置文件修改:

/usr/local/mqtt/emqx/etc/emqx.conf

修改账号密码:

设置密码认证:

allow_anonymous = false

导入插件:

cd /usr/lib/emqx/bin
sh emqx_ctl plugins load emqx_auth_username

设置账号密码

emqx_ctl users add admin public

springboot集成:

pom:

<!--mqtt-->
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.14</version>
</dependency>

yml配置:

spring:
  mqtt:
username: xxx
password: xxx
url: tcp://www.xxx.cn:1883
client:
id: xxx
topic: xxx
completionTimeout: 3000

package com.cw.common.mqtt;
/**
* @Description:
* @Auther: CW
* @Date: 2021/8/5 16:40
*/
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
* MQTT客户端订阅消息类
* @author zhongyulin
*
*/
@Component
public class MqttConsumer implements ApplicationRunner {

private static Logger logger = LoggerFactory.getLogger(MqttConsumer.class);

private static MqttClient client;

private static MqttTopic mqttTopic;

/**
* MQTT连接属性配置对象
*/
@Autowired
public MqttCofigBean mqttCofigBean;

/**
* 初始化参数配置
*/
@Override
public void run(ApplicationArguments args) throws Exception {
logger.info("初始化启动MQTT连接");
this.connect();
}

/**
* 用来连接服务器
*/
private void connect() throws Exception {
client = new MqttClient(mqttCofigBean.getHostUrl(), mqttCofigBean.getClientId(), new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(false);
options.setUserName(mqttCofigBean.getUsername());
options.setPassword(mqttCofigBean.getPassword().toCharArray());
options.setCleanSession(false); //是否清除session
// 设置超时时间
options.setConnectionTimeout(30);
// 设置会话心跳时间
options.setKeepAliveInterval(20);
try {
String[] msgtopic = mqttCofigBean.getMsgTopic();
//订阅消息
int[] qos = new int[msgtopic.length];
for (int i = 0; i < msgtopic.length; i++) {
qos[i] = 0;
}
client.setCallback(new TopMsgCallback(client, options, msgtopic, qos));
client.connect(options);
client.subscribe(msgtopic, qos);
logger.info("MQTT连接成功:" + mqttCofigBean.getClientId() + ":" + client);
} catch (Exception e) {
logger.error("MQTT连接异常:" + e);
}
}

/**
* 重连
*
* @throws Exception
*/
public void reConnect() throws Exception {
if (null != client) {
this.connect();
}
}

/**
* 订阅某个主题
*
* @param topic
* @param qos
*/
public void subscribe(String topic, int qos) {
try {
logger.info("topic:" + topic);
client.subscribe(topic, qos);
} catch (MqttException e) {
e.printStackTrace();
}
}

public MqttClient getClient() {
return client;
}

public void setClient(MqttClient client) {
this.client = client;
}

public MqttTopic getMqttTopic() {
return mqttTopic;
}

public void setMqttTopic(MqttTopic mqttTopic) {
this.mqttTopic = mqttTopic;
}
}

package com.cw.common.mqtt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MqttCofigBean {

@Value("${spring.mqtt.username}")
private String username;

@Value("${spring.mqtt.password}")
private String password;

@Value("${spring.mqtt.url}")
private String hostUrl;

@Value("${spring.mqtt.client.id}")
private String clientId;

@Value("${spring.mqtt.topic}")
private String msgTopic;

@Value("${spring.mqtt.completionTimeout}")
private int completionTimeout; //连接超时
/**
* 获取用户名
*
* @return
*/
public String getUsername() {
return this.username;
}

/**
* 获取密码
*
* @return
*/
public String getPassword() {
return this.password;
}

/**
* 获取服务器连接地址
*
* @return
*/
public String getHostUrl() {
return this.hostUrl;
}

/**
* 获取客户端ID
*
* @return
*/
public String getClientId() {
return this.clientId;
}

/**
* 获取默认主题
*
* @return
*/
public String[] getMsgTopic() {
String[] topic = msgTopic.split(",");
return topic;
}

/***
* 获取连接超时时间
* @return
*/
public int getCompletionTimeout() {
return this.completionTimeout;
}
}

package com.cw.common.mqtt;

/**
* @Description:
* @Auther: CW
* @Date: 2021/8/5 16:41
*/

import org.eclipse.paho.client.mqttv3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* MQTT消息处理类
* @author zhongyulin
* */
public class TopMsgCallback implements MqttCallback {

private static Logger logger = LoggerFactory.getLogger(TopMsgCallback.class);

private MqttClient client;
private MqttConnectOptions options;
private String[] topic;
private int[] qos;

public TopMsgCallback() {
}

public TopMsgCallback(MqttClient client, MqttConnectOptions options, String[] topic, int[] qos) {
this.client = client;
this.options = options;
this.topic = topic;
this.qos = qos;
}

/**
* 断开重连
*/
public void connectionLost(Throwable cause) {
logger.info("MQTT连接断开,发起重连");
while (true) {
try {
Thread.sleep(30000);
client.connect(options);
//订阅消息
client.subscribe(topic, qos);
logger.info("MQTT重新连接成功:" + client);
break;
} catch (Exception e) {
e.printStackTrace();
continue;
}
}

}

/**
* 接收到消息调用令牌中调用
*/
public void deliveryComplete(IMqttDeliveryToken token) {
}

/**
* 消息处理
*/
public void messageArrived(String topic, MqttMessage message) throws Exception {
System.out.println();
//订阅消息字符
String msg = new String(message.getPayload());
// byte[] bymsg = getBytesFromObject(msg);
logger.info("topic:" + topic);
logger.info("msg:" + msg);
}

//对象转化为字节码
// public byte[] getBytesFromObject(Serializable obj) throws Exception {
// if (obj == null) {
// return null;
// }
// ByteArrayOutputStream bo = new ByteArrayOutputStream();
// ObjectOutputStream oo = new ObjectOutputStream(bo);
// oo.writeObject(obj);
// return bo.toByteArray();
// }
}

mqtt安装和使用的更多相关文章

  1. centos6.5 mqtt安装

    CentOs 6.5 MQTT 安装部署 所需安装包: libwebsockets-v1.6-stable.tar.gz,mosquitto-1.4.8.tar.gz 1.安装依赖 # yum -y ...

  2. MQTT——安装、测试

    MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用         http://blog.csdn.net/xukai871105/article/details/39252653 ...

  3. MQTT安装

    技术链接:http://docs.emqtt.cn/zh_CN/latest/getstarted.htmlDashboard控制台:http://10.74.20.43:18083/#/ 默认登录用 ...

  4. 云端安装MQTT服务器

    如果自己下载的3.1版本的MQTT, 安装步骤参考 https://developer.emqx.io/docs/emq/v3/cn/install.html 配置用户名和密码第一种是用http ht ...

  5. centos 7 安装mqtt 修改用户名和密码

    我先新买个Centos 的系统 咱登录呢就用这个软件,主要是方便,可以少安装一些东西 根据自己的系统选择,上面的是32位的. 输入 root 回车 输入密码然后回车  输入的时候什么也不显示 输入 c ...

  6. 基于阿里云的MQTT远程控制

    好久没有写博客了,眼看自己的项目就要快做完了,先分享一下基于MQTT的远程控制,自己买了一个阿里的云端,然后在云端上安装了一个MQTT服务器,其实是一不小心买了两个,所以准备贡献出来一个供大家使用, ...

  7. MQTT服务器的搭建(Windows平台)

    人工智能.智能家居越来越火,在服务器和多个终端进行通信的过程中使用传统的请求/回答(Request/Response)模式已经过时,伴随而来的是发布/订阅(Publish/Subscribe)模式-- ...

  8. Mqtt用户认证

    http://emqtt.com/docs/v2/guide.html 1默认是匿名认证,不用输入用户名和密码,直接可连接 2如何开启用户名和密码认证模式 2-1关闭匿名认证 在你的MQTT安装目录下 ...

  9. 1-安装MQTT服务器(Windows),并连接测试

    对于不知道MQTT的肯定会问MQTT是干什么的....... 现在我有一个项目需求, 看到这个项目第一想法肯定需要一个服务器,所有的wifi设备和手机都去连接这个服务器,然后服务器进行信息的中转,类似 ...

  10. MQTT介绍(3)java模拟MQTT的发布,订阅

    MQTT目录: MQTT简单介绍 window安装MQTT服务器和client java模拟MQTT的发布,订阅 在此强调一下mqtt的使用场景: 1.不可靠.网络带宽小的网络 2.运行的设备CPU. ...

随机推荐

  1. leetcode 跳跃游戏系列

    55. 跳跃游戏 能跳一个范围,贪心 class Solution { public: bool canJump(vector<int>& nums) { int m = 0; / ...

  2. 渗透H5棋牌游戏-棋牌游戏开发

    0x01 前言 本來不想发的,涉及太多利益了,這些棋牌游戏的源码最高能卖到几万.开发起来不比一个商场进程难. 最近又太忙了,沒时间去做代码审计的文章了,但一不小心又抢了个运气王... 0x02 开始 ...

  3. 单个Java文件连接数据库demo

      在单个java文件中,尝试连接数据库,跟python的模块包安装方式很接近,已经测试成功,把博客写一下,记录下来.   首先把jdb的驱动包下载下来,就是一个jar包,下面是官网下载地址 官网下载 ...

  4. docker部署flask+uwsgi+nginx+postgresql,解耦拆分到多个容器,实现多容器互访

    本人承诺,本博客内容,亲测有效. dockerfile文件, FROM centos:7 RUN mkdir /opt/flask_app COPY ./show_data_from_jira /op ...

  5. Win11 win10系统分区时出现defrag事件怎么解决?

    Win11系统分区时出现defrag事件怎么解决?最近有用户反映这个问题,在重新整理磁盘分区的时候,遇到出现了defrag事件,不知道怎么解决,针对这一问题,本篇带来了详细的Win11系统分区时出现d ...

  6. [Swift]Swift图片显示方式设置,控件UIImageView的contentMode属性设置

    contentMode属性是用来设置图片在UIImageView中的显示方式,如:拉伸.居中.填充等. 这里讨论的是UIImageView宽高固定,图片宽高不确定的情况.如社交APP的相册缩略图.手机 ...

  7. Windows10免安装版的Mysql

    文章转载出处https://www.cnblogs.com/winton-nfs/p/11524007.html 免安装版的Mysql MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用 ...

  8. Amd,Cmd, Commonjs, ES6 import/export的异同点

    Amd,Cmd, Commonjs, ES6 import/export等均是模块化方案 1.Commonjs使用在Nodejs上,加载模块是同步的. 2.Amd是requirejs在推广过程中对模块 ...

  9. java写 变量到文件

    import java.io.BufferedReader; import java.io.File;import java.io.FileReader; import java.io.IOExcep ...

  10. Java基础__06.注解和反射

    注解 什么是注解? 1.注解:annocation,是从JDK5.0开始引进入的新技术. 2.注解的作用: 不是程序本身,可以对程序做出解释,这一点和注释一样: 可以被其他程序读取,这点是和注释的区别 ...