File tree 5 files changed +18
-20
lines changed
google-cloud-examples/src/main/java/com/google/cloud/examples/pubsub/snippets
main/java/com/google/cloud/pubsub/spi/v1
test/java/com/google/cloud/pubsub/spi/v1
5 files changed +18
-20
lines changed Original file line number Diff line number Diff line change 19
19
import com .google .cloud .pubsub .spi .v1 .MessageReceiver ;
20
20
import com .google .cloud .pubsub .spi .v1 .Subscriber ;
21
21
import com .google .cloud .pubsub .spi .v1 .SubscriberClient ;
22
- import com .google .common .util .concurrent .Futures ;
23
- import com .google .common .util .concurrent .ListenableFuture ;
24
22
import com .google .common .util .concurrent .MoreExecutors ;
23
+ import com .google .common .util .concurrent .SettableFuture ;
25
24
import com .google .pubsub .v1 .PubsubMessage ;
26
25
import com .google .pubsub .v1 .PushConfig ;
27
26
import com .google .pubsub .v1 .SubscriptionName ;
@@ -44,9 +43,10 @@ public static void main(String... args) throws Exception {
44
43
MessageReceiver receiver =
45
44
new MessageReceiver () {
46
45
@ Override
47
- public ListenableFuture <MessageReceiver .AckReply > receiveMessage (PubsubMessage message ) {
46
+ public void receiveMessage (
47
+ PubsubMessage message , SettableFuture <MessageReceiver .AckReply > response ) {
48
48
System .out .println ("got message: " + message .getData ().toStringUtf8 ());
49
- return Futures . immediateFuture (MessageReceiver .AckReply .ACK );
49
+ response . set (MessageReceiver .AckReply .ACK );
50
50
}
51
51
};
52
52
Subscriber subscriber = null ;
Original file line number Diff line number Diff line change 25
25
import com .google .common .primitives .Ints ;
26
26
import com .google .common .util .concurrent .FutureCallback ;
27
27
import com .google .common .util .concurrent .Futures ;
28
+ import com .google .common .util .concurrent .SettableFuture ;
28
29
import com .google .pubsub .v1 .PubsubMessage ;
29
30
import com .google .pubsub .v1 .ReceivedMessage ;
30
31
import java .util .ArrayList ;
@@ -278,11 +279,13 @@ public void processReceivedMessages(List<com.google.pubsub.v1.ReceivedMessage> r
278
279
for (ReceivedMessage userMessage : responseMessages ) {
279
280
final PubsubMessage message = userMessage .getMessage ();
280
281
final AckHandler ackHandler = acksIterator .next ();
282
+ final SettableFuture <AckReply > response = SettableFuture .create ();
283
+ Futures .addCallback (response , ackHandler );
281
284
executor .submit (
282
285
new Runnable () {
283
286
@ Override
284
287
public void run () {
285
- Futures . addCallback ( receiver .receiveMessage (message ), ackHandler );
288
+ receiver .receiveMessage (message , response );
286
289
}
287
290
});
288
291
}
Original file line number Diff line number Diff line change 16
16
17
17
package com .google .cloud .pubsub .spi .v1 ;
18
18
19
- import com .google .common .util .concurrent .ListenableFuture ;
19
+ import com .google .common .util .concurrent .SettableFuture ;
20
20
import com .google .pubsub .v1 .PubsubMessage ;
21
21
22
22
/** This interface can be implemented by users of {@link Subscriber} to receive messages. */
@@ -34,11 +34,10 @@ enum AckReply {
34
34
*/
35
35
NACK
36
36
}
37
-
37
+
38
38
/**
39
- * Called when a message is received by the subscriber.
40
- *
41
- * @return A future that signals when a message has been processed.
39
+ * Called when a message is received by the subscriber. The implementation must arrange for {@code
40
+ * reponse} to be set after processing the {@code message}.
42
41
*/
43
- ListenableFuture < AckReply > receiveMessage (PubsubMessage message );
42
+ void receiveMessage (PubsubMessage message , SettableFuture < AckReply > response );
44
43
}
Original file line number Diff line number Diff line change 81
81
* <pre><code>
82
82
* MessageReceiver receiver = new MessageReceiver() {
83
83
* @Override
84
- * public ListenableFuture <AckReply> receiveMessage(PubsubMessage message ) {
84
+ * public void receiveMessage(PubsubMessage message, SettableFuture <AckReply> response ) {
85
85
* // ... process message ...
86
- * return Futures.immediateFuture (AckReply.ACK);
86
+ * return response.set (AckReply.ACK);
87
87
* }
88
88
* }
89
89
*
Original file line number Diff line number Diff line change 28
28
import com .google .common .base .Optional ;
29
29
import com .google .common .base .Preconditions ;
30
30
import com .google .common .collect .ImmutableList ;
31
- import com .google .common .util .concurrent .ListenableFuture ;
32
31
import com .google .common .util .concurrent .SettableFuture ;
33
32
import com .google .pubsub .v1 .PubsubMessage ;
34
33
import com .google .pubsub .v1 .PullResponse ;
@@ -115,23 +114,20 @@ void waitForExpectedMessages() throws InterruptedException {
115
114
}
116
115
117
116
@ Override
118
- public ListenableFuture < AckReply > receiveMessage (PubsubMessage message ) {
117
+ public void receiveMessage (PubsubMessage message , SettableFuture < AckReply > response ) {
119
118
if (messageCountLatch .isPresent ()) {
120
119
messageCountLatch .get ().countDown ();
121
120
}
122
- SettableFuture <AckReply > reply = SettableFuture .create ();
123
121
124
122
if (explicitAckReplies ) {
125
123
try {
126
- outstandingMessageReplies .put (reply );
124
+ outstandingMessageReplies .put (response );
127
125
} catch (InterruptedException e ) {
128
126
throw new IllegalStateException (e );
129
127
}
130
128
} else {
131
- replyTo (reply );
129
+ replyTo (response );
132
130
}
133
-
134
- return reply ;
135
131
}
136
132
137
133
public void replyNextOutstandingMessage () {
You can’t perform that action at this time.
0 commit comments