使用 Mutiny 和 Quarkus 迭代 AWS SQS 消息列表

Iterate list of AWS SQS messages using Mutiny and Quarkus

刚刚了解 Mutiny API(和 java 直播 api)...

我有以下代码可以从 AWS SQS 队列中读取消息,参考:quarkus sqs guide

  Uni<List<Quark>> result =Uni.createFrom()
    .completionStage(sqs.receiveMessage(m -> m.maxNumberOfMessages(10).queueUrl(queueUrl)))
    .onItem().transform(ReceiveMessageResponse::messages)
    .onItem().transform(m -> m.stream().map(Message::body).map(this::toQuark).collect(Collectors.toList()));

接下来我想将列表中的每个元素发送到一个方法handleMessage(Quark quark)。我如何以“叛变的方式”做到这一点!是需要再变身还是不收..还是?

此刻,你得到一个Uni<List<Quark>>。 Mutiny 方法是将其转换为 Multi 并处理每个项目:

Multi<Quark> multi = result.onItem().transformToMulti(list -> Multi.createFrom().items(list));

Multi 是一个流。每一项都是 Quark。然后,您只需执行以下操作:

multi.onItem().invoke(q -> handleMessage(q))

我用了invoke因为我不知道handleMessage在做什么。如果它正在处理 Quark 和 returning 某些东西,请使用 transform。如果它没有 return 任何东西,请使用 invoke.

顺便说一句,不要忘记订阅 returned Multi。