Moquette and Greengrass NullPointerException

0

When subscribing to the MQTT on a Greengrass V2 core device running Moquette version 2.2.0 and I'm trying to subscribe from a device client I see this error in the logs:

Caused by: java.lang.NullPointerException
	at io.moquette.broker.PostOffice.subscribeClientToTopics(PostOffice.java:236)
	at io.moquette.broker.MQTTConnection.lambda$processSubscribe$6(MQTTConnection.java:402)
	at io.moquette.broker.SessionCommand.execute(SessionCommand.java:23)
	at io.moquette.broker.PostOffice.lambda$routeCommand$5(PostOffice.java:635)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)

It seems there may be a bug with this implementation as shown https://github.com/moquette-io/moquette/issues/473. That issue describes a setting named "cleanSession" that can be tried but it does not seem to be an option as documented https://github.com/moquette-io/moquette/blob/main/distribution/src/main/resources/moquette.conf. Is there a workaround for this? I've tried switching over to the **aws.greengrass.clientdevices.mqtt.EMQX ** broker instead but I can't seem to get that one to deploy. During deployment I get the following error:

FAILED_NO_STATE_CHANGE: NoAvailableComponentVersionException: No local or cloud component version satisfies the requirements. Check whether the version constraints conflict and that the component exists in your AWS account with a version that matches the version constraints. If the version constraints conflict, revise deployments to resolve the conflict. Component aws.greengrass.clientdevices.mqtt.EMQX version constraints: thinggroup/GreengrassPIDevices requires =1.0.0.

According to the component it requires the following:

aws.greengrass.clientdevices.Auth	>=2.2.0 <2.3.0

and I have version 2.2.0 installed on my core device.

I'm looking for suggestions on how to get around this issue. Thanks.

質問済み 2年前439ビュー
2回答
0

Hello,

First for Moquette, cleanSession is an option which you set in your MQTT client when connecting to the MQTT broker. Review your MQTT client's documentation for setting cleanSession to false or 0.

EMQX is available for Windows on x64 CPUs and on Linux for x64 and arm aarch64 CPUs. Given the error message that you received, it is most likely that you are using Linux on armv7 which is not one of the supported platforms for EMQX.

AWS
エキスパート
回答済み 2年前
  • Thanks. I'm using the arduino-aws-greengrass-iot api so I'll grep their code to see where I can set that.

0

Hi Al,

The Moquette bug you linked is very old and likely doesn't apply anymore. I'll ping the maintainer to close it.

Can you provide complete logs leading up to that NPE along with specific steps to reproduce? This is the line throwing the exception. It indicates that there is no MQTT session with the provided client ID, which would suggest your client is getting disconnected at some point after subscribing. We need more context to dig in further.

Consider opening an issue with us in Github.

Also, if you haven't already, take a look at our developer guide for setting up client devices.

Thanks, -joe

AWS
回答済み 2年前
  • FWIW - one common cause of disconnects is due to duplicate client IDs. This occurs when two clients connect using the same MQTT client ID. This would be a bug in your client side code -- take a look to see if this might be happening.

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ