Как преобразовать akka.stream.javadsl.Source в java.util.concurrent.Flow.Publisher - PullRequest
0 голосов
/ 10 июля 2019

Я экспериментирую с Test Compatability Kit (tck) для реактивных потоков, и, протестировав несколько издателей, я хотел протестировать akka Source.Но для этого мне нужно преобразовать Источник (или Источник + Процессор (ы)) в java.util.concurrent.Flow.Publisher.

@Override
public Flow.Publisher<Integer> createFlowPublisher(long elements) {
    return new FlowPublisher((int) elements);  // <-- how to test an akka.Source?
}

class FlowPublisher implements java.util.concurrent.Flow.Publisher {
    ...

И я нигде не могу найти, как это сделать.

Есть ли какая-нибудь документация по этому вопросу, или кто-то знает ответ наизусть?

1 Ответ

1 голос
/ 11 июля 2019

вы можете преобразовать akka-streams Source в org.reactivestreams.Publisher (что соответствует java.util.concurrent.Flow согласно реактивным потокам ):

implicit val sys: ActorSystem = ActorSystem()
implicit val mat: ActorMaterializer = ActorMaterializer()

val source = Source.single(1) // some random source
val publisher: Publisher[Int] = source.runWith(Sink.asPublisher(false))

подробности можно найти в официальных документах akka-streams - Интеграция с реактивными потоками


Следует отметить, что akka-streams имеет документацию и некоторые наборы для тестирования его компонента - Тестирование потоков . я бы сказал, что лучше тестировать компоненты akka-streams с помощью комплекта для тестирования akka-streams, потому что вам не нужно делать дополнительные преобразования в org.reactivestreams.* сущности, и код тестирования будет намного чище, проще и надежнее

...