EMQX配置以及Android连接

EMQX配置

我用的是Windows,所以配置的是Winows版本;

先去官网下载 emqx
安装很简单

1 通过 emqx.io 或 github 选择 Windows 版本,然后下载要安装的 .zip 包。

2 解压压缩包

3 打开 Windows 命令行窗口,cd 到程序目录, 启动 EMQ X

现在应该没有证书,需要安装证书不然 emqx console会进入失败
安装证书

如何使用 license 文件:

  1. 点击 ‘下载 License’ 按钮后,打开下载成功的 license.zip 压缩包。

  2. 复制压缩包里的两个文件(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

看看有没有页面出来,如下图:

EMQX配置以及Android连接_第1张图片

如果加载出来了页面,那就成功了

下面用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添加

    
    
    
    
    
    
        
        
        

3 综合一下

EMQX配置以及Android连接_第2张图片

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();
    }
}

测试结果

EMQX配置以及Android连接_第3张图片

你可能感兴趣的:(Android,Studio)