EMQ ---问题集
1)emqttd 使用 SSL遇到的问题:服务器直接布了一份emqttd
,然后什么都没管,端口默认的ws 8083,wss8084,mqtt 1883,mqtt(ssl) 8883。
结果跑起来之后点了点发现出了问题,前端的websocket根本连不上,Chrome报错
WebSocket connection to 'wss://10.0.0.111:8084/mqtt' failed: Error in connection establishment: net::ERR_INSECURE_RESPONSE
mqtt配置文件中描述如下:

但是发现即使按照这个路径配置好了还是不行,google上有解答方案:

问题原因在于证书只对域名有效,而不是IP。改成域名一测,立马成功

还有一个小提示,在windows环境下安装的emqttd,他的config文件不要用记事本打开,如果用记事本打开进行修改的话,运行emqttd console会报错,但是用写字板打开没问题,感觉是编码的原因
一个客户端sub很多主题和数据,出现宕机?使用本地共享订阅解决!
EMQ中CPU是公平分配给MQTT会话,大量pub消息到一个订阅,订阅不会拿到更多cpu,最终导致消息累积,内存溢出宕机。
最好的解决办法是分组订阅,把消息打散,多个客户端订阅。
问:请问一下,我现在的业务就是只使用一个sub,主题是\hello\#,去订阅数万个终端消息。请问针对这个问题,如何来优化业务逻辑?可以通过增加sub的方式吗?即把数万终端分成几个小组,每小组往一个主题pub,然后再分别订阅?
答:不需要自己实现,使用emq 2.x的本地+共享订阅相结合即可。使用主题:$local/$share/group/topic
http://emqtt.com/docs/v2/advanced.html#local-subscription
高级特性 (Advanced Features)
EMQ 2.0 版本新增了本地订阅与共享订阅功能。
简介
使用本地订阅后,指消息只在订阅者的本地(所连接的)EMQ节点,不会流传到集群中的其它EMQ节点中。在共享订阅中,订阅同一个主题的客户端会轮流的收到这个主题下的消息,也就是说同一个消息不会发送到多个订阅者,从而实现订阅端的多个节点之间的负载均衡。共享订阅对于数据采集/集中处理类应用非常有用。在这样的场景下,数据的生产者远多余数据的消费者,且同一条数据只需要被任意消费者处理一次。
本地订阅 (Local Subscription)
本地订阅(Local Subscription) 只在本节点创建订阅与路由表,不会在集群节点间广播全局路由,非常适合物联网数据采集应用:
mosquitto_sub -t '$local/topic' mosquitto_pub -t 'topic'
使用方式: 订阅者在主题(Topic)前增加 ‘$local/’ 前缀。
共享订阅 (Shared Subscription)
共享订阅(Shared Subscription)支持在多订阅者间采用分组负载平衡方式派发消息:
---------
| | --Msg1--> Subscriber1
Publisher--Msg1,Msg2,Msg3-->| EMQ | --Msg2--> Subscriber2
| | --Msg3--> Subscriber3
---------
共享订阅支持两种使用方式:
| 订阅前缀 | 使用示例 |
| $queue/ | mosquitto_sub -t ‘$queue/topic’ |
| $share/<group>/ | mosquitto_sub -t ‘$share/group/topic’ |
其中$queue与$share的区别,在于$share后面可以加不同的分组(group),比如$share/group1/topic,$share/group2/topic,$share/group3/topic,生产者发一个topic的消息,订阅$share/group1/topic的消费者、$share/group2/topic的消费者、$share/group3/topic的消费者都能收到消息,如果一个分组中存在多个消费者,则多个消费者还会共享订阅消息,每个group的消息随机其中一个消费者能获得。
emq2.x版本,共享订阅只支持单节点,不支持集群。
使用场景
当生产者和消费者的消息只想通过一个EMQ节点,可使用EMQ的本地订阅。
当消费者的消息想通过EMQ实现订阅端的多个消费者之间的负载均衡,则可使用EMQ的共享订阅。
特殊情况下,当多个生产者生产多条消息的时候,一个消费者压力会很大,分担一个消费者的压力,或者其它情况,需要用到本地共享订阅。本地共享订阅是本地订阅与共享订阅的组合。
下图为本地共享订阅的消息走向和订阅关系。每个消费者都必须本地共享订阅每一个EMQ节点,这样每条消息只会走向一个消费者。注意:这里的SUB指消费者,PUB指生产者。

消息流向
每个PUB的消息从经过LB(负载均衡),发送到不同的EMQ节点中,比如第一个EMQ节点收到的M1、M3、M4的消息:
通过本地订阅,这个EMQ节点的消息把收到的M1、M3、M4的消息不发给其它集群的EMQ节点,只从这个EMQ节点发送给订阅的SUB。
通过共享订阅,这个EMQ的消息把收到的M1、M3、M4的消息发送给不同的SUB端。
通过上述本地订阅+共享订阅,实现多个PUB发送的每条消息随机到达一个并且只有一个SUB。
订阅关系
每个SUB使用本地共享订阅($local/$share/A)来订阅EMQ集群中的每个EMQ节点。
.
EMQ ---问题集的更多相关文章
- EMQ学习 ---集群
emqttd集群设置管理 一.先来看EMQ的文档定义:http://emqtt.com/docs/v1/cluster.html emqttd集群设置管理 假设部署两台服务器s1.emqtt.io, ...
- Emqtt集群搭建
1 Emqtt简单搭建 1.1 介绍:EMQ:EMQ 2.0,号称百万级开源MQTT消息服务器,基于Erlang/OTP语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源MQTT消息服务器 ...
- EMQ集群搭建实现高可用和负载均衡(百万级设备连接)
一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...
- emqtt 试用(二)验证 emq 和 mosquito 的共享订阅
本地订阅(Local Subscription) 本地订阅(Local Subscription)只在本节点创建订阅与路由表,不会在集群节点间广播全局路由,非常适合物联网数据采集应用. 使用方式: 订 ...
- 使用EMQ搭建MQTT服务器
前言寒假的时候开始搭建mqtt服务器,一开始使用的是RabbitMQ,基于Erlang语言.但是RabbitMQ的本职工作是AMQP,MQTT只是他的一个插件功能,似乎有些大材小用,很多MQTT的功能 ...
- EMQ ---v2.3.11源码成熟度
从原作者那边了解到,总体还可以,但是做不到99.99%稳定.主要是连接内存占用没有保护. pubsub均衡时很稳定,但是集群或大量消息向少量订阅发布时会崩溃,小概率情况. EMQ中CPU是公平分配给M ...
- EMQ --集成搭建
集群方式接受 Erlang/OTP 最初是爱立信为开发电信设备系统设计的编程语言平台,电信设备(路由器.接入网关.…)典型设计是通过背板连接主控板卡与多块业务板卡的分布式系统. Erlang/OTP ...
- [emqttd] (EMQ)
[emqttd] (EMQ)是采用Erlang语言开发,全面支持MQTT V3.1.1协议,支持集群和大规模连接的开源MQTT消息服务器. [emqttd]致力于发布一个基于Erlang/OTP语言平 ...
- 转:EMQ(emqttd) 2.x 安装和使用(物联网传输控制协议的Broker)
支持下国产开源. MQTT物联网传输控制协议:<MQTT-3.1.1-CN.pdf> 下载:emqttd-centos64-v2.0-rc.2-20161019.zip 安装: $ unz ...
随机推荐
- Linux下简单分析请求有没有进到本机的工具tcpdump(网络接口的数据包的头信息)
可以通过这个工具快速分析出一个请求到底有没有进入到本机.信息有点简单,对于前期的分析比较有帮助.而对于详细的分析可以借助iptables的raw表进行日志分析. 参考: http://man.linu ...
- ExtJS ComboBox同时加载远程和本地数据
ExtJS ComboBox同时加载远程和本地数据 原文:http://gblog.hbcf.net/index.php/archives/233 ComboBox比较特殊需求,将远程数据和本地数据同 ...
- Buck converter uses low-side PWM IC
The most common switching-power topology is a buck converter, which efficiently transforms high volt ...
- PWM DAC Low Pass Filtering
[TI博客大赛][原创]LM3S811之基于PWM的DAC http://bbs.ednchina.com/BLOG_ARTICLE_3005301.HTM http://www.fpga4fun.c ...
- InstallShield 2010集成.net Framework 4的安装包制作
InstallShield 2010中制作安装包时,对于集成.net Framework 4以前的版本,如3.5 sp1/3.5/3.0/2.0 sp2/2.0sp1/2.0等提供了现成的prq文件模 ...
- 微信公众平台——获取access_token、expires_in
微信公众平台——获取access_token.expires_in 在微信公众平台接口开发中,Access Token占据着重要地位,它相当于进入各种接口的邀请,拿到这个钥匙才拥有调用其他各种特殊接口 ...
- hdu1269迷宫城堡 (强连通Tarjan+邻接表)
Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说 ...
- C++对象赋值的四种方式
1. 引用作为参数的方式传递. GetObject(Object& obj) { obj.value = value1; } 特点: 在外部构造一个对象. 把该对象以引用的方式传递到函数中. ...
- ScaleIO 1.2 基础
The ScaleIO virtual SAN consists of 3 software components =================== Meta Data Manager (MDM ...
- Android -- Sqlite事务
这也是通过Android Juint来实现的. 基于上一次的工程继续,上一次工程传送门:<Android–Android Juint 与 Sqlite> http://www.cnblog ...