当前位置: 首页 > 知识库问答 >
问题:

在Project reactor中处理ListenableFuture

盛琪
2023-03-14

我已经开始玩project reactor并想把我们的一个API移动到反应方式来做事情。我想知道如何处理像ListenableFuture这样的事情。

在我的例子中,我使用的是Cassandra,当我调用session.executeAsync()时,它返回一个扩展ListenableFuture的ResultSetFuture。下面是我现在已经编码的示例,我似乎不太乐意向客户公开ListenableFuture。

public Mono<ListenableFuture<Void>> save(Publisher<AccountDTO> accountPublisher) {
    return Mono.just(accountPublisher)
            .map(accountDTO -> {
                Account accountEntity = modelMapper.map(accountDTO, Account.class);
                return mappingManager.mapper(Account.class).saveAsync(accountEntity);
            })
            .retry(1)
            .doOnError(throwable -> log.error("Unable to create account "))
            .mapError(throwable -> new MyCustomException(""));
}

我的问题是:

公开ListenableFuture是一个好的实践吗,我个人不想把类似这样的东西还给客户机,在那里他们可以阻止。有没有一个更好的方法来处理这个项目反应堆,我可以返回一个单声道?

共有1个答案

颜经艺
2023-03-14

通过使用mono.create()工厂方法,您可以轻松地桥接ListenableFuture 异步API,以公开Mono 。该方法采用使用者 ,您将其作为lambda提供,该lambda:

  1. 向未来添加一个调用sink.success()的成功侦听器(因为没有实际值,也可以使用侦听器接收的void值调用success(avid))
  2. 向调用Sink的future添加失败侦听器。错误(失败)

差不多就是这样!请参阅关于create的参考文档(尽管这篇文章提到了flux版本,由于必须处理多个值,该版本稍微复杂一些):http://projectreactor.io/docs/core/release/reference/docs/index.html#producing.create

 类似资料:
  • 我主要是为技术精明的人编写一个小工具,例如程序员、工程师等,因为这些工具通常是快速的,随着时间的推移,我知道会有未处理的异常,用户不会介意。我希望用户能够向我发送回溯,这样我就可以检查发生了什么,并可能改进应用程序。 我通常做wxPython编程,但我最近做了一些Java。我已经将

  • 问题内容: 以下处理方式有什么区别?最好的方法是什么? 要么 编辑:我也想知道这两种情况在哪些情况下使用。 问题答案: 以下处理的方式之间有什么区别?最好的方法是什么? 你可能会问这个问题,因为你已经调用了方法。 首先,你应该了解它的含义:方法签名的一部分以及调用你正在调用的方法的可能结果。因此,首先要包含一个事实,即是方法调用的完全有效结果。 现在,如果你正在调用的方法抛出此类异常,那么你的方法

  • 问题内容: 这是我用于通过DataReader从sql读取数据的代码。当表中有NULL时,它将给出错误。怎么处理呢? 我试过了 问题是它可以成功处理NULL,但是即使sql数据库在该字段中的值为1,结果也始终为0。 问题答案: 您可以用来从数据读取器中检查空值。C#和有所不同。

  • 需要读取spring批处理中的文件,对其进行处理并将其作为一个提要保存。一个提要包含50%的信息。当我必须持久化提要的最终结果时,我需要使用公共字段将它们组合起来,并像一个项目一样持久化。请参见下面的示例。 我需要保留的最终信息如下: 请建议我如何在我的Spring批工作中实现这一点。 谢谢

  • 我在静态类中存储游戏的纹理。它们从管理器加载到此类的静态数组中。 每个屏幕都有一个dispose方法,但我应该在纹理上的何处调用dispose。libGDX是否只在应用程序退出时处理,因此我应该在每个屏幕中处理纹理?

  • 问题内容: 我想要一个文本区域,可以处理按 Tab 键的情况。 在默认情况下,如果您按 Tab 键,则焦点将离开文本区域。但是,当用户想要在文本区域中输入 Tab 键时会怎样呢? 我可以捕捉到此事件并将焦点返回到文本区域并将标签添加到 当前 光标位置吗? 问题答案: