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/’ 前綴。
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節點。
.
