0
Source<ByteString, ?> source = Source.<ByteString>queue(1000, OverflowStrategy.backpressure())
        .mapMaterializedValue(queue -> {

            int i = 0;
            AtomicInteger j = new AtomicInteger();
            List<Unsubscribe> batchResponse = new ArrayList<>();
            while (cursor.hasNext()) {
                batchResponse.add(mongoConverter.read(Unsubscribe.class, cursor.next()));
                if (batchResponse.size() % batchSize == 0) {
                    CompletionStage<QueueOfferResult> ss = queue.offer(ByteString.fromString(JacksonUtils.toJson(new ArrayList<>(batchResponse))));
                    ss.whenComplete((s,err) -> {
                        if (s.isEnqueued()) {
                            j.incrementAndGet();
                        }
                    });

                    i = i + batchResponse.size();
                    logger.info("tell " + String.valueOf(i) + " to actor");
                    batchResponse = new ArrayList<>();
                }
            }
            if (batchResponse.size() != 0) {
                queue.offer(ByteString.fromString(JacksonUtils.toJson(new ArrayList<>(batchResponse))));
                i = i + batchResponse.size();
                logger.info("tell " + String.valueOf(i) + " to actor");
            }
            queue.complete();
            queue.watchCompletion().toCompletableFuture()
                    .whenComplete((ss, aa) -> logger.info("sent unsubscribe message success and {}", j.get()));

            logger.info("sent unsubscribe message success and {}", j.get());
            return NotUsed.getInstance();
        });

return ok().chunked(source);

I logged send into queue count, I have 2M data but only 1000+ data into buffer, The buffer size is 1000, seems just send '1000' data to client, why??

I'm trying change batch size and use different Overflow strategy but seems just send how many data which I set batch size

0 Answers0