如何使用micronaut传输来自JPA的数据流?

时间:2019-01-25 09:18:32

标签: rest java-stream reactive-programming rx-java2 micronaut

我目前正在与micronaut和kotlin一起工作。我有JPA查询,它产生大约一百万个结果。 我想将这些结果从一项微服务传输到另一项。

我的查询返回类型为allQuery.resultStream的{​​{1}}。

发送服务的控制器:

java.util.stream

接收服务的客户

@Get("/test{value1,value2,value3}")
fun getTestObjects(
    value1: String,
    value2: String,
    value3: String
): Stream<TestObject> {
    val entries = testRepository.findAllWhere(value1, value2, value3)

    return entries
}

JPA查询如下:

@Get("/data/test{value1,value2,value3}")
override fun getTestObjects(alue1: String,
    value2: String,
    value3: String) : Stream<TestObject>

我的预期输出将是一种具有推后调节功能的Flowable,并且由于没有足够的内存而没有发送服务先将所有对象都放入内存的情况。

1 个答案:

答案 0 :(得分:3)

基本上,您只需要创建一个Flowable并发出可用的项目即可。

return Flowable.create(emitter -> {

  //loop through result set
  //for each item
  emitter.onNext(item);

  //If you encounter an error
  emitter.onError(...);

  //When you're done
  emitter.onComplete();

})