Reactor 3 (2): 建立Publisher之Mono

在這裏插入圖片描述

Reactor中的Publisher

Reactor中有兩種Publisher:Flux和Mono,其中Flux用來表示0N個元素的異步序列,Mono用來表示01個元素的異步序列,相對於Flux而言Mono更簡單一些。java

建立Mono

reactor中的mono能夠經過一些方法建立,經常使用方法以下:react

  • just():能夠指定序列中包含的所有元素。
  • empty():建立一個不包含任何元素。
  • error(Throwable error):建立一個只包含錯誤消息的序列。
  • fromCallable()、fromCompletionStage()、fromFuture()、fromRunnable()和 fromSupplier():分別從 Callable、CompletionStage、CompletableFuture、Runnable 和 Supplier 中建立 Mono。
  • delay(Duration duration):建立一個 Mono 序列,在指定的延遲時間以後,產生數字 0 做爲惟一值。
  • ignoreElements(Publisher source):建立一個 Mono 序列,忽略做爲源的 Publisher 中的全部元素,只產生結束消息。
  • justOrEmpty(Optional<? extends T> data)和 justOrEmpty(T data):從一個 Optional 對象或可能爲 null 的對象中建立 Mono。只有 Optional 對象中包含值或對象不爲 null 時,Mono 序列才產生對應的元素。
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.util.Date;
import java.util.concurrent.CompletableFuture;

/** * @author: ffzs * @Date: 2020/8/5 下午3:57 */

@Slf4j
public class MonoTest {

    @Test
    public void mono() {
        // 經過just直接賦值
        Mono.just("my name is ffzs").subscribe(log::info);
        // empty 建立空mono
        Mono.empty().subscribe();
        // 延遲生成0
        Mono.delay(Duration.ofMillis(2)).map(String::valueOf).subscribe(log::info);
        // 經過Callable
        Mono.fromCallable(() -> "callback function").subscribe(log::info);
        // future
        Mono.fromFuture(CompletableFuture.completedFuture("from future")).subscribe(log::info);
        // 經過runnable
        Mono<Void> runnableMono = Mono.fromRunnable(() -> log.warn(Thread.currentThread().getName()));
        runnableMono.subscribe();
        // 經過使用 Supplier
        Mono.fromSupplier(() -> new Date().toString()).subscribe(log::info);
        // flux中
        Mono.from(Flux.just("from", "flux")).subscribe(log::info);  // 只返回flux第一個
    }
}

下面是運行結果:
在這裏插入圖片描述
api

使用StepVerifier測試

  • 經過expectNext執行相似斷言的功能
@Test
    public void StepVerifier () {
        Mono<String> mono = Mono.just("ffzs").log();
        StepVerifier.create(mono).expectNext("ff").verifyComplete();
    }

若是next斷言不符合實際狀況,就會報錯:
在這裏插入圖片描述
異步

相關文章
相關標籤/搜索