28
28
import java .util .Iterator ;
29
29
import java .util .List ;
30
30
import java .util .Queue ;
31
+ import java .util .concurrent .BlockingQueue ;
31
32
import java .util .concurrent .ConcurrentLinkedQueue ;
32
33
import java .util .concurrent .ExecutionException ;
33
34
import java .util .function .Consumer ;
@@ -46,14 +47,14 @@ public class MqttMessageSender implements Runnable {
46
47
47
48
private final TbConnectionConfiguration connection ;
48
49
49
- private Queue <MessageFuturePair > incomingQueue ;
50
+ private BlockingQueue <MessageFuturePair > incomingQueue ;
50
51
private Queue <Future <Void >> outgoingQueue ;
51
52
52
53
public MqttMessageSender (TbPersistenceConfiguration persistence ,
53
54
TbConnectionConfiguration connection ,
54
55
MqttClient tbClient ,
55
56
PersistentFileService persistentFileService ,
56
- Queue <MessageFuturePair > incomingQueue ) {
57
+ BlockingQueue <MessageFuturePair > incomingQueue ) {
57
58
this .persistence = persistence ;
58
59
this .connection = connection ;
59
60
this .tbClient = tbClient ;
@@ -102,7 +103,7 @@ public void run() {
102
103
103
104
private Future <Void > publishMqttMessage (MqttPersistentMessage message ) {
104
105
return tbClient .publish (message .getTopic (), Unpooled .wrappedBuffer (message .getPayload ()), MqttQoS .AT_LEAST_ONCE ).addListener (
105
- future -> incomingQueue .add (new MessageFuturePair (future , message ))
106
+ future -> incomingQueue .put (new MessageFuturePair (future , message ))
106
107
);
107
108
}
108
109
@@ -128,7 +129,7 @@ private boolean checkOutgoingQueueIsEmpty() {
128
129
129
130
private boolean checkClientConnected () throws InterruptedException {
130
131
if (!tbClient .isConnected ()) {
131
- outgoingQueue .stream (). forEach (future -> future .cancel (true ));
132
+ outgoingQueue .forEach (future -> future .cancel (true ));
132
133
outgoingQueue .clear ();
133
134
log .info ("ThingsBoard MQTT connection failed. Reconnecting in [{}] milliseconds" , connection .getRetryInterval ());
134
135
Thread .sleep (connection .getRetryInterval ());
0 commit comments