java.lang.IllegalArgumentException "main"线程中的异常:没有为URI "http://xxx.xxx.xxx.xxx:xxxx"的方案"http"安装网络模块



我目前正在为我的项目使用 MQTT eclipse/paho.mqtt.java 库。 这是 Eclipse/paho.mqtt.java 库的链接。

https://github.com/eclipse/paho.mqtt.java

我想用http协议连接MQTT。 但是原始库是tcp协议。我试图通过创建一个 mqtt 客户端来与 mqtt 建立连接。我将在下面显示我的代码,

很抱歉在 IP 地址和 URL 中使用xxx符号。

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MQTT {
public static void main(String[] args) {
String topic        = "MQTT Examples";
String content      = "Message from MqttPublishSample";
int qos             = 2;
//String broker       = "tcp://iot.eclipse.org:1883";
String broker       = "http://xxx.xxx.xxx.xxx:xxxx";
String clientId     = "JavaSample";
MemoryPersistence persistence = new MemoryPersistence();
try {
MqttClient sampleClient = new MqttClient(broker, clientId, null);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
String accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String pass = "";
char[] charArr = pass.toCharArray();
//I added in here my access token of the server
connOpts.setUserName(accessToken);
connOpts.setPassword(charArr);
System.out.println("Connecting to broker: "+broker);
sampleClient.connect(connOpts);
System.out.println("Connected");
System.out.println("Publishing message: "+content);
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
sampleClient.publish(topic, message);
System.out.println("Message published");
sampleClient.disconnect();
System.out.println("Disconnected");
System.exit(0);
} catch(MqttException me) {
System.out.println("reason "+me.getReasonCode());
System.out.println("msg "+me.getMessage());
System.out.println("loc "+me.getLocalizedMessage());
System.out.println("cause "+me.getCause());
System.out.println("excep "+me);
me.printStackTrace();
}
}
}

它显示以下错误,

Exception in thread "main" java.lang.IllegalArgumentException: no NetworkModule installed for scheme "http" of URI "http://xxx.xxx.xxx.xxx:xxxx"
at org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI(NetworkModuleService.java:70)
at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:454)
at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:320)
at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:315)
at org.eclipse.paho.client.mqttv3.MqttClient.<init>(MqttClient.java:227)
at MQTT.main(MQTT.java:17)

那么我应该为此做些什么,例如日食在String broker ="tcp://iot.eclipse.org:1883";中使用了tcp协议。 但我想为此设置http,我尝试将其添加为这样,String broker = "http://xxx.xxx.xxx.xxx:xxxx";然后得到了上面的错误,那么该怎么办。

从这个问题中不清楚你想做什么,但这可能有助于为你澄清一些事情。

  1. MQTT 是 Pub/Sub 协议,HTTP 是请求响应协议。整个范式是不同的,你不能直接用一个代替另一个。
  2. MQTT通常在TCP/IP之上本机运行,但它也可以使用Websockets作为传输层运行。Websockets通过HTTP引导。

Paho 客户端代理 URL 模式(协议(可以是以下之一:

  • tcp://这是基于 TCP 的原生 MQTT
  • ssl://这是基于 TCP 的原生 MQTT 和 SSL/TLS
  • ws://此 MQTT over Websockets
  • wss://这是基于 SSL/TLS 的 Websockets 上的 MQTT
  • local://特殊情况在这里没有用。

为了在TCP(tcp://(上使用基本MQTT以外的任何内容,您需要将代理配置为支持它作为与默认1883不同的端口上的额外侦听器。

相关内容

最新更新