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节点。

.

最新文章

  1. 由于某IP大频率提交评论导致服务器宕机
  2. [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
  3. 在 Windows 和 Linux(Gnome) 环境下 从命令界面打开网页的方式
  4. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据
  5. 手机前端页面js
  6. Qt---- 点击按钮调用另一个窗口Ui
  7. 编译并使用Lua语言
  8. android利用剪切板来实现数据的传递
  9. javascript类继承系列三(对象伪装)
  10. BufferedReader的ready与readLine使用,以及Premature EOF异常
  11. 物理机与虚拟机IP互ping通,而互ping主机名不通
  12. ORACLE中date类型字段的处理
  13. struts2 通配符简化配置
  14. vue-chat项目之重构与体验优化
  15. webpack构建项目
  16. iOS-Mac配置Tomcat【Mac环境配置Tomcat】
  17. Golang的时间生成,格式化,以及获取函数执行时间的方法
  18. Spring Boot 框架学习 (一)配置并运行Spring Boot 框架
  19. openstack之Neutron网络模式vlan,gre,vxlan详解
  20. HTTP 基础

热门文章

  1. CentOS 6.9永久设置静态路由表以及路由表常用设置
  2. Struts2 学习笔记 09 访问Web元素
  3. mac os颜色拾取工具/软件/器推荐
  4. 自己定义AlertDialog对话框布局
  5. 字符串转base64,base64转字符串
  6. 菜鸟学Java(二十)——你知道long和Long有什么差别吗?
  7. nrf51822, How to use a vendor specific UUID?
  8. 学会自己写jQuery插件(二)---自己写的tab插件
  9. SQL Alias
  10. 如何使用angularjs操作cookie