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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容