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

通量到列表而不阻塞

怀宇
2023-03-14

正在寻找将Flux转换为<code>列表

Flux.from(Collection.find())

使用反应式编程,但graph ql期望List

带Block()的代码

public List<Test> findAll() {
        return Flux.from(testCollection.find()).collectList().block();

}

错误:-

block()/blockFirst()/blockLast() are blocking, which is not supported in thread reactor-http-kqueue-7

在这里,我需要返回列表


共有3个答案

陆信瑞
2023-03-14

以下示例是转换助焊剂

public static void main(String[] args) {
    Flux<String> flux = Flux.just("test1", "test2", "test3");
    List<String> list = new ArrayList<>();
    flux.collectList().subscribe(list::addAll);
    list.forEach(System.out::println);
}

聂永怡
2023-03-14
匿名用户

我假设< code>Collection类来自某个reactor库,正在进行一些tcp/http调用。< code>collection.find返回一个< code>Flux/Mono/Publisher我假设?这不是因为< code>collectList不允许您这样做,而是因为您试图在一个< code >非阻塞线程上运行< code>block,我假设< code>collection.find在一个线程上发布元素,该线程是< code >非阻塞的一个实例,其名称为< code > reactor-http-k queue-7 ,可能是一个netty线程。

你可以看看阻止单曲订阅者.blockingGet方法,它告诉你为什么

    final T blockingGet() {
        if (Schedulers.isInNonBlockingThread()) {
            throw new IllegalStateException("block()/blockFirst()/blockLast() are blocking, which is not supported in thread " + Thread.currentThread().getName());
        }
...

如果您必须从调用方线程(调用 Flux.from)获取结果,那么您可以执行

Flux.from(testCondition.find())
.publishOn(Schedulers.boundedElastic())
.collectList()
.block()

东云
2023-03-14

正如评论中所说,你不能。反应模式是保持在一个流中。

所以,

Mono<GraphqlResponse> = Flux.just("A", "B" "C")
  .collectList()
  .map(this::someMethod);

GraphqlResponse someMethod(List<String> abcs) {
    return graphQl.doSomething(abcs);
}
 类似资料:
  • 我试图访问MyModelClass上的getter方法,但我的代码返回

  • 我试图实现从阻塞队列创建的Reactor通量,但不确定哪个操作符最适合我的用例? 我正在创建一个流式RESTendpoint,其中的响应是流量,需要不断从阻塞队列中发出消息,作为获取REST调用的响应。 我已经尝试过论坛和留档,只能找到从可迭代集合或响应数据源发起的Flux,但没有任何BlockingQueue的示例。

  • blpop key1...keyN timeout 从左到右扫描返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。如果所有的list都是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。当阻塞时,如果有client对ke

  • 我有一个像这样的xsd- 当我使用XJC生成类绑定时,我看到教师是List类型的 如何生成字符串列表而不是对象?任何帮助都很感激。 更新:使用“vamsilp”提供的解决方案——在删除“教师”元素上的“minOccurs”后,它工作得很好!XSD是由泽西从以下代码自动生成的: 我不知道如何删除“minOccurs”属性。我是否需要修改代码以忽略它?

  • 问题内容: 我有一个清单: 有没有更多的pythonic方式可以解压缩此值,例如: 问题答案: 像这样吗? 另外,为了记录在案,请注意您的示例将因IndexError而失败(Python的列表基于零)。 编辑:以上说明是在固定OP示例之前编写的…

  • 我要做的事 我正在使用一个名为的类和一个名为(生成一个容易记住的密码)和的函数来生成一个密码生成器,这两个函数将生成一个复杂的密码。 我的代码: 我的问题 当我运行这个程序时,我得到一个错误: 完全错误: 回溯(最近一次调用):文件“C:\users\sbenf\oneDrive\python projects\large projects\adventure_colussus_game\pass