https://www.emqx.io/downloads?os=CentOS
1)
Download emqx-5.1.6-el8-amd64.tar.gz SHA256
wget https://www.emqx.com/en/downloads/broker/5.1.6/emqx-5.1.6-el8-amd64.tar.gz
2)
Install EMQX
mkdir -p emqx && tar -zxvf emqx-5.1.6-el8-amd64.tar.gz -C emqx
3)
Run EMQX
./emqx/bin/emqx start
代码部分是大佬写的需要可以参考 点击这里
运行要求
gcc-c++
erlang
gcc --version //查看是否安装gcc 出现版本则是已安装,未安装可以参考 Ubuntu系统中gcc安装_ubuntu gcc 12.1-CSDN博客
安装erlang
erl -version //查看erlang版本没有则说明未安装erlang sudo apt install erlang //安装erlang
新建EMQTT安装文件夹并下载EMQX安装包(文件夹位置随意,这里是/home/bytedance)
mkdir EMQX //新建安装文件夹 cd EMQX //进入安装文件夹 wget https://www.emqx.com/en/downloads/broker/5.1.6/emqx-5.1.6-el8-amd64.tar.gz //
启动运行
//下载完成后,在EMQX文件夹下会有一个压缩包 //解压压缩包 tar -xvf 下载的文件名 tar -xvf emqx-5.0.8-el8-amd64.tar.gz //启动 bin/emqx start //停止 bin/emqx stop //查看状态 bin/emqx_ctl status
控制面板
浏览器输入 127.0.0.1:18083(127.0.0.1是本地的IP,如果是运行在远程服务器需要改成远程服务器的IP) 出现页面说明安装启动成功,默认账户密码在配置文件加下可以看到 默认账户是admin 默认密码是public
不喜欢英文界面的可以在设置里修改为中文
关于测试
安装完成后可以新建个客户端来进行测试
新建Maven工程
POM文件
<dependencies>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.3</version>
</dependency>
</dependencies>
Server
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import java.util.Scanner;
public class Server {
public static void main(String[] args) throws Exception {
String host = "tcp://127.0.0.1:1883";
String topic = "hello";
String clientId = "server";// clientId不能重复这个是server的id
//新建mqtt连接
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
//新建mqtt客户端
MqttClient client = new MqttClient(host, clientId);
client.connect(options);
//新建mqtt消息
MqttMessage message = new MqttMessage();
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要发送的内容:");
while (true) {
String MsgMessage= scanner.nextLine();
message.setPayload(MsgMessage.getBytes());
client.publish(topic, message);
}
}
}
Client
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
public class Client {
public static void main(String[] args) throws Exception {
String host = "tcp://127.0.0.1:1883";
String topic = "hello";
String clientId = "动次打次嘿嘿嘿嘿";// clientId不能重复,这个是client的id
// 1.设置mqtt连接属性
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
// 2.实例化mqtt客户端
MqttClient client = new MqttClient(host, clientId);
// 3.连接
client.connect(options);
//这里的setCallback需要新建一个Callback类并实现 MqttCallback 这个类
client.setCallback(new PushCallback());
while (true) {
client.subscribe(topic, 2);
}
// client.disconnect();
}
}
PushCallback
import java.util.Date;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PushCallback implements MqttCallback {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public void connectionLost(Throwable cause) {
// 连接丢失后进行重连
System.out.println("连接断开,可以做重连");
logger.info("掉线时间:{}", new Date());
}
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("deliveryComplete---------" + token.isComplete());
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
// subscribe后得到的消息会执行到这里面
// System.out.println(message);
System.out.println("接收消息主题 : " + topic);
System.out.println("接收消息Qos : " + message.getQos());
System.out.println("接收消息内容 : " + new String(message.getPayload()));
}
}