EMQX配置
我用的是Windows,所以配置的是Winows版本;
先去官网下载 emqx
安装很简单
1 通过 emqx.io 或 github 选择 Windows 版本,然后下载要安装的 .zip 包。
2 解压压缩包
3 打开 Windows 命令行窗口,cd 到程序目录, 启动 EMQ X
现在应该没有证书,需要安装证书不然 emqx console会进入失败
安装证书
如何使用 license 文件:
-
点击 ‘下载 License’ 按钮后,打开下载成功的 license.zip 压缩包。
-
复制压缩包里的两个文件(emqx.lic, emqx.key)到 EMQX 的 license 目录。
-
如果您是以 zip 包的方式安装的 EMQX,那么 license 目录为 ‘emqx/etc/’;
-
如果您是以 DEB/RPM 包的方式安装的 EMQX,那么 license 目录为 ‘/etc/emqx/’;
-
如果您是以 Docker 的方式安装的 EMQX,那么 license 目录为 ‘/opt/emqx/etc/’。
准备完毕就可以启动了
emqx start
去浏览器
默认用户名: admin,密码:public
看看有没有页面出来,如下图:
如果加载出来了页面,那就成功了
下面用python实现消息发布:
需要 安装下 paho.mqtt 安装包
pip staller paho.mqtt安装即可
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
if __name__ == '__main__':
client = mqtt.Client("mqtt")
client.on_connect = on_connect
client.on_message = on_message
client.connect("n你的ipv4地址", 1883, 600)
while True:
#f发布的主题是 emqtt 消息是Hello,EMQ!
client.publish('emqtt', payload='Hello,EMQ!', qos=0)
client.loop_start()
下面实现安卓端的消息订阅
1 配置Gradle
在build.gradle
repositories {
maven {
url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
}
dependencies {
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}
}
2 注册权限和服务
在AndroidManifest添加
<!-- Permissions the Application Requires -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</activity>
<service android:name="org.eclipse.paho.android.service.MqttService">
</service>
3 综合一下
4 编写订阅消息
package com.example.mqtt;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.IMqttToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class MainActivity extends AppCompatActivity {
MqttAndroidClient mqttAndroidClient;
final String serverUri = "tcp://你的ipv4地址:1883";
String clientId = "robot";
#订阅的话题要和发布的话题一致
final String subscriptionTopic = "emqtt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//新建client实例
clientId = clientId + System.currentTimeMillis();
mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), serverUri, clientId);
//设置回调函数
mqttAndroidClient.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean reconnect, String serverURI) {
}
@Override
public void connectionLost(Throwable cause) {
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
//打印订阅的消息
Log.i("mouse",new String(message.getPayload()));
// makeToast(new String(message.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
});
//连接设置,是否重连,是否清理session
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setAutomaticReconnect(true);
mqttConnectOptions.setCleanSession(false);
try {
//连接mqtt服务器
mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
makeToast("连接成功");
Log.i("mouse","连接成功");
//订阅topic
subscribeToTopic();
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
makeToast("连接失败");
Log.i("mouse","连接失败!!!"+exception.getMessage());
}
});
} catch (MqttException ex) {
ex.printStackTrace();
}
}
public void subscribeToTopic() {
try {
//开始订阅
mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
makeToast("成功订阅到" + subscriptionTopic);
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
makeToast("订阅失败" + subscriptionTopic);
}
});
} catch (MqttException ex) {
ex.printStackTrace();
}
}
private void makeToast(String str) {
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
}
}