開発中に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
このネット上で探したのは購読異常で、それから私の購読を見て、やはり購読のテーマは
自然購読はできないし、ipに対してもだめだ、aclのようだ.configファイルは$SYSトピックを購読できる権限を定義します.
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、ノード名を次のように変更します.
eg:
$SYS/brokers/[email protected]/uptime: qos=0
$SYS/brokers/[email protected]/sysdescr: qos=0
クライアントの上下線のトピックの購読
特定のノードのクライアントID方式のトピックは、次のとおりです.
パス方式のテーマは次のとおりです.
安全のためaclをconfigファイルを次のように変更します.
クライアントは「$SYS/brokers/+/clients/#」トピックを購読できますが、「$SYS/#」トピックの購読は禁止されています.
以上修正して接続OKを再試行
例外は次のとおりです.
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を再試行