開発中にmqttがMqttException(128)の異常問題に遭遇

3065 ワード

最進会社はmqttを独立させて、彼にサーバーを配置して、それから私は127.0.0.1以外の接続をテストする時に異常を投げ出します
例外は次のとおりです.
MqttException (128)     at org.eclipse.paho.client.mqttv3.MqttClient.subscribe(MqttClient.java:347)     at com.dmxj.qianghe.common.push.MqttSub.sub(MqttSub.java:48)     at com.dmxj.qianghe.common.push.MqttSub.runsub(MqttSub.java:55)     at com.dmxj.qianghe.common.socket.SocketClientInit.init(SocketClientInit.java:61)     at javax.servlet.GenericServlet.init(GenericServlet.java:158)     at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1132)     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1079)     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:973)     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4885)     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5199)     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:743
このネット上で探したのは購読異常で、それから私の購読を見て、やはり購読のテーマは
$SYS/brokers/[email protected]/clients/#

自然購読はできないし、ipに対してもだめだ、aclのようだ.configファイルは$SYSトピックを購読できる権限を定義します.
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

%%%{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

{allow, all}.

acl.configファイルの3行目のデフォルトは、$SYS/#トピックのクライアント購読を禁止します.私たちはそれを注釈します.クライアントを開き、$SYS/#トピックを購読します.メッセージは次のとおりです.
module(emqttd_broker)というモジュールでは、uptimeやdatetimeなどのトピックキーワードを毎秒publishメッセージします.
module(emqttd_stats)このモジュールでは、60秒ごとにpublishメッセージが表示され、Etsテーブルmqtt_statsのメッセージが出ます.
module(emqttd_metrics)というモジュールは、原理が同じです.
eg: 
$SYS/brokers/[email protected]/uptime: qos=0
$SYS/brokers/[email protected]/sysdescr: qos=0
 
ファイルvmを開く.args、ノード名を次のように変更します.
#-name [email protected]
-name [email protected]

eg: 
$SYS/brokers/[email protected]/uptime: qos=0
$SYS/brokers/[email protected]/sysdescr: qos=0
 
クライアントの上下線のトピックの購読
特定のノードのクライアントID方式のトピックは、次のとおりです.
$SYS/brokers/(node)/clients/(clientId)/connected
$SYS/brokers/[email protected]/clients/861694030142478/connected
$SYS/brokers/[email protected]/clients/861694030142478/disconnected

 
パス方式のテーマは次のとおりです.
$SYS/brokers/+/clients/+/connected
$SYS/brokers/+/clients/+/disconnected
$SYS/brokers/+/clients/#

 
安全のためaclをconfigファイルを次のように変更します.
クライアントは「$SYS/brokers/+/clients/#」トピックを購読できますが、「$SYS/#」トピックの購読は禁止されています.
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

{allow, all, subscribe, ["$SYS/brokers/+/clients/#"]}.

{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

{allow, all}.

以上修正して接続OKを再試行