美文网首页
利用EMQX--搭建单机MQTT服务器

利用EMQX--搭建单机MQTT服务器

作者: 做一只快乐的码农1990 | 来源:发表于2019-08-22 16:34 被阅读0次

    1、在阿里云购买云服务器或者虚拟机安装Linux。

      关于linux系统,可以在阿里云购买云服务器或者利用虚拟机安装CentOs系统。我用的就是阿里云的云服务器,比较方便吧。

    2、安装Emqx

    安装必要的依赖:
    $ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    设置稳定的仓库,比如CentOs7的例子:
    $sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
    
    安装最新版本的 EMQ X
    $ sudo yum install emqx
    
    也可以安装指定版本
    先查询软件版本列表
    $ yum list emqx --showduplicates | sort -r
    
    emqx.x86_64                     3.1.0-1.el7                        emqx-stable
    emqx.x86_64                     3.0.1-1.el7                        emqx-stable
    emqx.x86_64                     3.0.0-1.el7                        emqx-stable
    
    选择其中一个版本安装
    
    $ sudo yum install emqx-3.1.0
    

    4、启动Emqx

    直接启动
    $ emqx start
      emqx 3.1.0 is started successfully!
    
    $ emqx_ctl status
      Node 'emqx@127.0.0.1' is started
      emqx v3.1.0 is running
      
    系统启动
    $ sudo systemctl start emqx
    
    服务启动
    $ sudo service emqx start
    

    5、访问Web后台界面

      在访问后台界面时,应该先开放Emqx对应的端口。如下:

    端口    端口对应的协议或者作用
    1883    MQTT protocol port
    8883    MQTT/SSL port
    8083    MQTT/WebSocket port
    8080    HTTP API port
    18083   Dashboard Management Console Port
    

      在虚拟机安装的Linux 则使用该方式放开端口:

    iptables -A INPUT -ptcp --dport  1883 -j ACCEPT
    iptables -A INPUT -ptcp --dport  8883 -j ACCEPT
    iptables -A INPUT -ptcp --dport  8083 -j ACCEPT
    iptables -A INPUT -ptcp --dport  8080 -j ACCEPT
    iptables -A INPUT -ptcp --dport  18083 -j ACCEPT
    
    保存操作
    service iptables save
    

      在阿里云则在对应的云服务器的安全组中添加对应的开放端口。如下操作:

      登录阿里云后台->进入控制台->点击云服务器ECS->实例列表中找到响应的示例->点击更多->
    找到网络和安全组->点击安全组配置->看见响应的安全组列表,然后点击配置规则->在出入方向 中都添加如下配置

    1、阿里云安全组配置.png
      访问后台地址:http://localhost:18083,其中localhost可以替换为你的云服务器公网IP或者虚拟机IP。登录账号:admin,密码:public。进入Web管理控制台。如下图所示:
    2、web控制台.png

    6、测试Emqx 服务是否可用

      本次用到的测试工具是常见的MQTTBox

      MQTTBox官网下载地址:http://workswithweb.com/html/mqttbox/downloads.html

      下载完成后,直接安装即可。

      安装完成后打开客户端,如下所示:


    图3、打开客户端.png

      点击"Create MQTT Client"后,显示如下:


    图4、配置Client.png

      上图中,在ClientName中填上客户端名称,比如Test_Client;在Protocol中选择 'mqtt/tcp' 这个选项;在Host 中填上 127.0.0.1:1883,其中127.0.0.1需要替换成自己的与服务器公网IP或者虚拟机IP。点击save,进入如下界面:


    图5、测试PubOrSub.png

      应先开启一个订阅,如上图所示。"Topic to subscribe" 里填入要订阅的主题"test";"QoS" 字段选择 "0 - Almost Once" ;然后点击 "Subscribe" 按钮。

      后发布一条消息,如上图所示。"Topic to publish" 中输入 "test" ,这里输入的主题的名字必须和订阅那里的输入相同;"QoS" 中选择 "0 - Almost Once" ;"Payload" 中输入任何内容都可以,如下图所示输入了一组JSON字符串;所有内容输入完毕之后,点击"Publish"按钮。测试成功如下图显示:


    图6、测试成功图.png

      测试成功,说明Emqx服务可用,接下来应该测试用于设备上了。这边打算引用的ClientSDK 为Java 语言的 MqttClient。

      MqttClient 的GitHub地址:https://github.com/fusesource/mqtt-client

    7、应用MqttClient-Java SDK

      1.Maven中引入如下依赖:

    <dependency>
        <groupId>org.fusesource.mqtt-client</groupId>
        <artifactId>mqtt-client</artifactId>
        <version>1.9</version>
    </dependency>
    

      2.创建一个MqttSubscriber.java 文件,代码如下:

    public class MqttSubscriber {
    
    /**
     * MQTT 的 IP 地址
     */
    public static final String  MQTT_SERVER_URL="x.x.x.x";
    
    public static void main(String[] args) throws Exception {
        MQTT mqtt = new MQTT();
        mqtt.setHost(MQTT_SERVER_URL, 1883);
        BlockingConnection connection = mqtt.blockingConnection();
        connection.connect();
        Topic[] topics = {new Topic("Java_Test", QoS.AT_LEAST_ONCE)};
        byte[] qoses = connection.subscribe(topics);
        Message message = connection.receive();
        System.out.println(message.getTopic());
        byte[] payload = message.getPayload();
        System.out.println("打印接收到的消息:"+new String(payload));
        message.ack();
        connection.disconnect();
       }
    }
    

    &esmp; 3.创建一个MqttPublisher.java 文件,代码如下:

    public class MqttPublisher {
    
    public static void main(String[] args) throws Exception {
        MQTT mqtt = new MQTT();
        mqtt.setHost(MqttSubscriber.MQTT_SERVER_URL, 1883);
        BlockingConnection connection = mqtt.blockingConnection();
        connection.connect();
        connection.publish("Java_Test", "Java".getBytes(), QoS.AT_LEAST_ONCE, true);
        System.out.println("执行发送消息。。。。");
      }
    }
    

      4.先执行MqttSubscriber的main函数,后执行MqttPublisher的main函数。测试成功后控制带输出如下图所示:


    图7、publisher控制台.png 图8、subscriber控制台.png

    8、总结

      EMQ X 是一个为移动互联和物联网设计的轻量级的publish-subscribe消息中间件。支持当前主流的 MQTT v3.1.1 and v5.0。示意图如下:


    图9、pub-sub示意图.png

      这边只是对MQTT的一些粗浅应用和认识,如果想对EMQ X有更深入的了解,可以观看其项目官方文档:https://docs.emqx.io/broker/v3/en/guide.html

    一些参考资料:

    EMQ X官方文档:https://docs.emqx.io/broker/v3/en/guide.html

    Mqtt_Box官方文档:http://workswithweb.com/html/mqttbox/getstarted.html

    Mqtt_Client GitHub:https://github.com/fusesource/mqtt-client

    Mqtt GitHub:https://github.com/mqtt/mqtt.github.io

    相关文章

      网友评论

          本文标题:利用EMQX--搭建单机MQTT服务器

          本文链接:https://www.haomeiwen.com/subject/cdxosctx.html