1

只是让我了解 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)。我该如何以“叛变的方式!”做到这一点。我需要再次转换还是不应该收集..或者?

4

1 回答 1

1

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

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

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

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

我用过invoke,因为我不知道handleMessage在做什么。如果它正在处理 Quark 并返回一些东西,请使用transform. 如果它没有返回任何东西,请使用invoke.

顺便说一句,不要忘记订阅返回的 Multi。

于 2022-02-02T07:44:42.063 回答