When
Connect/Automatic reconnect is successful I am publishing
the messages/resume publishing.
If QOS
level is set to 0, messages are not getting published.Same
code work fine with QOS set to 1 and 2.
Note:I am
not using disconnected publishing as my queue requirement is
different.
public class MqttPublishQosIssue
{
static
MqttClient sampleClient = null;
private
static final String topic = "MQTT Examples";
private
static final String content = "Message from
MqttPublishSample-";
private
static final int qos = 0;
private
static final String broker = "tcp://localhost:1883";
private
static final String clientId = "JavaSample";
public
static void main(String[] args) throws
InterruptedException {
try
{
sampleClient
= new MqttClient(broker, clientId, new
MemoryPersistence());
final
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setAutomaticReconnect(true);
connOpts.setCleanSession(true);
sampleClient.setCallback(new
MqttCallbackExtended() {
public
void connectComplete(boolean reconnect, String serverURI)
{
System.out.println("<<
Connected to MQTT broker >> reconnect FLag" +
reconnect);
try
{
//Process
Messages when connect is true/or automatic reconnect is
true.
processMessages();
}
catch (MqttException e) {
e.printStackTrace();
}
}
public
void connectionLost(Throwable cause) {
System.out.println("<<
Connection to MQTT broker lost >>" +
cause.getMessage());
}
public
void deliveryComplete(IMqttDeliveryToken token) {
System.out.println("<<
Message was successfully delivered to MQTT>>");
}
public
void messageArrived(String topic, MqttMessage message)
throws Exception {
//
Nothing to do
}
});
sampleClient.connect(connOpts);
//No
disconnect call as messages should be sent in a while loop
}
catch (MqttException me) {
System.out.println("excep
" + me);
}
}
private
static void processMessages() throws MqttException,
MqttPersistenceException {
System.out.println("[[Start
processing of messages]]");
//while(true){
//Take
incoming new + pending messages from user defined Q
MqttMessage
message = new MqttMessage(content.getBytes());
message.setQos(qos);//QOS
level is 0 message publish wont happen,Thread gets stuck
!!.No callback's as well.
sampleClient.publish(topic,
message);
System.out.println("[[End
processing of messages]]");
//}
}
}