首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Eclipse Paho MQTT客户端通过SigV4 presignedURL连接到AWS IoT MessageBroker

使用Eclipse Paho MQTT客户端通过SigV4 presignedURL连接到AWS IoT MessageBroker
EN

Stack Overflow用户
提问于 2020-10-14 20:27:24
回答 1查看 367关注 0票数 0

我正在尝试使用Eclipse Paho创建一个Java Mqtt客户端,它可以使用AwsIotWebSocketUrlSignergetSignedUrl方法生成的SigV4预签名网址连接到亚马逊网络服务IoT MessageBroker。

连接代码如下所示。

代码语言:javascript
复制
IMqttAsyncClient client = new MqttAsyncClient(*presignedUrl*,MqttAsyncClient.generateClientId(), new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setCleanSession(true);
IMqttToken token = client.connect(options);
token.waitForCompletion();
client.setCallback( *callBackObject* );
client.subscribe(topic, AWSIotQos.QOS1.getValue());

我一直处于异常状态。它在上面的connect()中失败了。

代码语言:javascript
复制
MqttException (0) - java.lang.NullPointerException
    at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
    at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:664)
    at java.lang.Thread.run(Thread.java:749)
Caused by: java.lang.NullPointerException
    at org.eclipse.paho.client.mqttv3.internal.websocket.WebSocketHandshake.receiveHandshakeResponse(WebSocketHandshake.java:133)
    at org.eclipse.paho.client.mqttv3.internal.websocket.WebSocketHandshake.execute(WebSocketHandshake.java:74)
    at org.eclipse.paho.client.mqttv3.internal.websocket.WebSocketSecureNetworkModule.start(WebSocketSecureNetworkModule.java:77)
    at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:650)

在Eclipse Paho中,在验证WSS握手时,这里会发生代码异常。

代码语言:javascript
复制
String connectionHeader = (String) headerMap.get(HTTP_HEADER_CONNECTION);
if (connectionHeader == null || connectionHeader.equalsIgnoreCase(HTTP_HEADER_CONNECTION_VALUE)) {
    throw new IOException("WebSocket Response header: Incorrect connection header");
}

我可以使用Javascript客户端和presignedUrl进行连接。

任何帮助/示例代码都将非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-15 02:57:27

在查看AWS Sdk如何使用Eclipse Paho时发现了这一点。https://github.com/aws/aws-iot-device-sdk-java/blob/647449e654096172ebfcc31d79a8c582f952219d/aws-iot-device-sdk-java/src/main/java/com/amazonaws/services/iot/client/core/AwsIotWebsocketConnection.java#L46

它正在将端口号443添加到clientEndpoint。很明显,我用的presignedUrl不是这样的。因此,我将signingUrl更改为也有端口号,并且它起作用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64353258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档