当前位置:   article > 正文

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

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

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

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

2、安装Emqx

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

4、启动Emqx

  1. 直接启动
  2. $ emqx start
  3. emqx 3.1.0 is started successfully!
  4. $ emqx_ctl status
  5. Node 'emqx@127.0.0.1' is started
  6. emqx v3.1.0 is running
  7. 系统启动
  8. $ sudo systemctl start emqx
  9. 服务启动
  10. $ sudo service emqx start

5、访问Web后台界面

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

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

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

  1. iptables -A INPUT -ptcp --dport 1883 -j ACCEPT
  2. iptables -A INPUT -ptcp --dport 8883 -j ACCEPT
  3. iptables -A INPUT -ptcp --dport 8083 -j ACCEPT
  4. iptables -A INPUT -ptcp --dport 8080 -j ACCEPT
  5. iptables -A INPUT -ptcp --dport 18083 -j ACCEPT
  6. 保存操作
  7. 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中引入如下依赖:

  1. <dependency>
  2. <groupId>org.fusesource.mqtt-client</groupId>
  3. <artifactId>mqtt-client</artifactId>
  4. <version>1.9</version>
  5. </dependency>

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

  1. public class MqttSubscriber {
  2. /**
  3. * MQTT 的 IP 地址
  4. */
  5. public static final String MQTT_SERVER_URL="x.x.x.x";
  6. public static void main(String[] args) throws Exception {
  7. MQTT mqtt = new MQTT();
  8. mqtt.setHost(MQTT_SERVER_URL, 1883);
  9. BlockingConnection connection = mqtt.blockingConnection();
  10. connection.connect();
  11. Topic[] topics = {new Topic("Java_Test", QoS.AT_LEAST_ONCE)};
  12. byte[] qoses = connection.subscribe(topics);
  13. Message message = connection.receive();
  14. System.out.println(message.getTopic());
  15. byte[] payload = message.getPayload();
  16. System.out.println("打印接收到的消息:"+new String(payload));
  17. message.ack();
  18. connection.disconnect();
  19. }
  20. }

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

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

  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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/188522
推荐阅读
相关标签
  

闽ICP备14008679号