AWS Kinesis消耗反应性消息

时间:2020-08-06 21:54:23

标签: java spring-boot amazon-kinesis reactor spring-reactor

我正在尝试实现运动学消费者反应。我目前的理解是,运动学碎片总是被线程消耗,因此消耗它的线程将进行订阅。

这是我的代码:

   private static CompletableFuture<Void> responseHandlerBuilderReactor(KinesisAsyncClient client, SubscribeToShardRequest request) {

        SubscribeToShardResponseHandler responseHandler = SubscribeToShardResponseHandler
                .builder()
                .onError(t -> System.err.println("Error during stream - " + t.getMessage()))
                .onEventStream(p -> Flux.from(p)
                        .ofType(SubscribeToShardEvent.class)
                        .flatMapIterable(SubscribeToShardEvent::records)
                        .limitRate(2)
                        .buffer(2)
                        .subscribe(e -> {
                            // decoder.decode(record.data()).toString();
                            e.forEach(el-> {
                                try {
                                    System.out.println(decoder.decode(el.data().asByteBuffer()));
                                } catch (CharacterCodingException e1) {
                                    e1.printStackTrace();
                                }
                            });
                        }))
                        .build();
        return client.subscribeToShard(request, responseHandler);

    }

    public static void main(String[] args) {

        KinesisAsyncClient client = KinesisAsyncClient.create();

        SubscribeToShardRequest request = SubscribeToShardRequest.builder()
                .consumerARN(CONSUMER_ARN)
                .shardId("shardId-000000000000")
                .startingPosition(StartingPosition.builder().type(ShardIteratorType.TRIM_HORIZON).build())
                .build();

        responseHandlerBuilderReactor(client, request).join();

        client.close();
    }

我认为关于运动学我有很多细节,即使我继续阅读也不清楚。

文档说此连接将具有低延迟HTTP / 2连接,但是我不知道如何在两次运行之间处理该连接,这是我重新启动应用程序时不希望处理已经消耗的消息的意思。如何为响应版本实现RecordProcessorCheckpointer?

几分钟后,该过程也会退出,而不会出现任何错误。我记得读过我需要重新订阅的文档。如果我在无限循环中运行responseHandlerBuilderReactor(client, request).join();就足够了吗?

0 个答案:

没有答案