I'm working on Mosquitto MQTT Broker and I need to reach it by a Spring Boot Application.
The Mosquitto Broker is on a docker container and from an Arduino client and MQTTX client it is successfully reached.
The problem is the Spring Boot application: every time the application try to connect to Broker the following error is raised:
2023-04-18T00:04:54.878+02:00 DEBUG 32920 --- [ restartedMain] com.abubusoft.iot.service.MQTTService : MQTTService tcp://192.168.1.100:1833
2023-04-18T00:04:54.891+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.MqttAsyncClient : paho7659740194162: <init> ClientID=paho7659740194162 ServerURI=tcp://192.168.1.100:1833 PersistenceType=org.eclipse.paho.client.mqttv3.persist.MemoryPersistence@6a3aae31
2023-04-18T00:04:54.893+02:00 DEBUG 32920 --- [ restartedMain] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: <>
2023-04-18T00:04:54.897+02:00 DEBUG 32920 --- [ restartedMain] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: >
2023-04-18T00:04:54.899+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.MqttAsyncClient : paho7659740194162: cleanSession=true connectionTimeout=30 TimekeepAlive=60 userName=null password=[null] will=[null] userContext=null callback=null
2023-04-18T00:04:54.899+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.MqttAsyncClient : paho7659740194162: URI=tcp://192.168.1.100:1833
2023-04-18T00:04:54.900+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.MqttAsyncClient : paho7659740194162: URI=tcp://192.168.1.100:1833
2023-04-18T00:04:54.901+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.MqttAsyncClient : paho7659740194162: <
2023-04-18T00:04:54.903+02:00 DEBUG 32920 --- [ restartedMain] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: state=CONNECTING
2023-04-18T00:04:54.904+02:00 DEBUG 32920 --- [ restartedMain] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: >
2023-04-18T00:04:54.905+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: key=null wait max=-1 token=key=null ,topics= ,usercontext=org.eclipse.paho.client.mqttv3.MqttAsyncClient@196d55bd ,isComplete=false ,isNotified=false ,exception=null ,actioncallback=org.eclipse.paho.client.mqttv3.internal.ConnectActionListener@62f51a05
2023-04-18T00:04:54.905+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: >
2023-04-18T00:04:54.905+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: >
2023-04-18T00:04:54.905+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: >key=null timeout=-1 sent=false completed=false hasException=false response=null token=key=null ,topics= ,usercontext=org.eclipse.paho.client.mqttv3.MqttAsyncClient@196d55bd ,isComplete=false ,isNotified=false ,exception=null ,actioncallback=org.eclipse.paho.client.mqttv3.internal.ConnectActionListener@62f51a05
2023-04-18T00:04:54.906+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: key=null wait max=-1
2023-04-18T00:04:54.906+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: key=Con message=CONNECT clientId paho7659740194162 keepAliveInterval 60
2023-04-18T00:04:54.907+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: key=Con token=org.eclipse.paho.client.mqttv3.MqttToken@60494888
2023-04-18T00:04:54.908+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.m.internal.TCPNetworkModule : paho7659740194162: connect to host 192.168.1.100 port 1,833 timeout 30,000
2023-04-18T00:04:54.932+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.m.internal.TCPNetworkModule : paho7659740194162: Failed to create TCP socket
java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
at java.base/java.lang.Thread.run(Thread.java:834)
2023-04-18T00:04:54.937+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: connect failed: unexpected exception
org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
... 2 common frames omitted
2023-04-18T00:04:54.976+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: state=DISCONNECTING
2023-04-18T00:04:54.976+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: resp=Client is currently disconnecting (32102)
2023-04-18T00:04:54.976+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: >
2023-04-18T00:04:54.976+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: reason Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
2023-04-18T00:04:54.983+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: >
2023-04-18T00:04:54.983+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: key=Con
2023-04-18T00:04:54.984+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: disconnected
2023-04-18T00:04:54.984+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: >
2023-04-18T00:04:54.991+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: > 0 tokens
2023-04-18T00:04:54.991+02:00 DEBUG 32920 --- [ho7659740194162] o.e.paho.client.mqttv3.TimerPingSender : paho7659740194162: stop
2023-04-18T00:04:54.991+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: state=DISCONNECTED
2023-04-18T00:04:54.991+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsCallback : paho7659740194162: callback and notify for key=Con
2023-04-18T00:04:54.991+02:00 DEBUG 32920 --- [ho7659740194162] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: >key=Con response=null excep=Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
2023-04-18T00:04:54.995+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsCallback : paho7659740194162: call onSuccess key=Con
2023-04-18T00:04:54.995+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: state=CONNECTING
2023-04-18T00:04:54.995+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: >
2023-04-18T00:04:54.996+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: >
2023-04-18T00:04:54.999+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: >
2023-04-18T00:04:54.999+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: key=Con message=CONNECT clientId paho7659740194162 keepAliveInterval 60
2023-04-18T00:04:54.999+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: key=Con token=org.eclipse.paho.client.mqttv3.MqttToken@3b0b92a1
2023-04-18T00:04:55.000+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.m.internal.TCPNetworkModule : paho7659740194162: connect to host 192.168.1.100 port 1,833 timeout 30,000
2023-04-18T00:04:55.016+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.m.internal.TCPNetworkModule : paho7659740194162: Failed to create TCP socket
java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
at java.base/java.lang.Thread.run(Thread.java:834)
2023-04-18T00:04:55.016+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: connect failed: unexpected exception
org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
... 2 common frames omitted
2023-04-18T00:04:55.020+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: state=DISCONNECTING
2023-04-18T00:04:55.020+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: resp=Client is currently disconnecting (32102)
2023-04-18T00:04:55.020+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: >
2023-04-18T00:04:55.021+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: reason Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
2023-04-18T00:04:55.023+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: >
2023-04-18T00:04:55.023+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: key=Con
2023-04-18T00:04:55.023+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: disconnected
2023-04-18T00:04:55.023+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientState : paho7659740194162: >
2023-04-18T00:04:55.031+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsTokenStore : paho7659740194162: > 0 tokens
2023-04-18T00:04:55.031+02:00 DEBUG 32920 --- [ho7659740194162] o.e.paho.client.mqttv3.TimerPingSender : paho7659740194162: stop
2023-04-18T00:04:55.031+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.ClientComms : paho7659740194162: state=DISCONNECTED
2023-04-18T00:04:55.031+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsCallback : paho7659740194162: callback and notify for key=Con
2023-04-18T00:04:55.031+02:00 DEBUG 32920 --- [ho7659740194162] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: >key=Con response=null excep=Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
2023-04-18T00:04:55.034+02:00 DEBUG 32920 --- [ho7659740194162] o.e.p.c.mqttv3.internal.CommsCallback : paho7659740194162: call onSuccess key=Con
2023-04-18T00:04:55.034+02:00 DEBUG 32920 --- [ho7659740194162] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: >key=null response=null excep=Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
2023-04-18T00:04:55.034+02:00 DEBUG 32920 --- [ho7659740194162] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: >key=null response=null excep=Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
2023-04-18T00:04:55.038+02:00 DEBUG 32920 --- [ restartedMain] o.e.paho.client.mqttv3.internal.Token : paho7659740194162: failed with exception
org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
... 2 common frames omitted
Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80)
at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
... 2 more
The Mosquitto MQTT Broker does not require credentials (it's a server for developer purpose). Its configuration:
allow_anonymous true
persistence false
listener 1883 0.0.0.0
The snippet code in the Spring Boot application does not work:
package com.abubusoft.iot.service;
import java.util.Arrays;
import javax.net.ssl.SSLSocketFactory;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class MQTTService {
private MqttClient client;
private String brokerServer;
public MQTTService(@Value("${spring.mqtt.broker.server}") String brokerServer) {
log.debug("MQTTService {}", brokerServer);
this.brokerServer = brokerServer;
try {
client =
new MqttClient(
brokerServer, // serverURI in format:
MqttClient.generateClientId(), // ClientId
new MemoryPersistence()
); // Persistence
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
//mqttConnectOptions.setUserName("<your_username>");
//mqttConnectOptions.setPassword("<your_password>".toCharArray());
// using the default socket factory
//mqttConnectOptions.setSocketFactory(SSLSocketFactory.getDefault());
client.setCallback(callback);
client.connect(mqttConnectOptions);
client.subscribe("/device/status", 0);
// client.setTimeToWait();
// client.publish(
// "topic",
// "payload".getBytes(UTF_8),
// 2, // QoS = 2
// false);
} catch (MqttException e) {
e.printStackTrace();
}
}
private final Logger log = LoggerFactory.getLogger(MQTTService.class);
private MqttCallback callback = new MqttCallback() {
@Override
// Called when the client lost the connection to the broker
public void connectionLost(Throwable cause) {
System.out.println("client lost connection " + cause);
}
@Override
public void messageArrived(String topic, MqttMessage message) {
System.out.println(topic + ": " + Arrays.toString(message.getPayload()));
}
@Override
// Called when an outgoing publish is complete
public void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("delivery complete " + token);
}
};
}
The Spring boot application use the following library
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.5</version>
</dependency>
The Mosquitto Broker is eclipse-mosquitto:2.0.15.
Any suggestion to resolve this problem? Thanks in advance.