Spring Boot 4 Microservices & REST APIs · บทเรียน

พื้นฐาน Mono และ Flux

ทำความเข้าใจตัวเผยแพร่แบบรีแอกทีฟ

บทเรียน 1 จาก 413 ขั้นตอน

พื้นฐาน Mono และ Flux เป็นบทเรียน Spring Boot 4 Microservices & REST APIs ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Spring Boot 4 Microservices & REST APIs และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 4 บทเรียน

การเขียนโปรแกรมเชิงรีแอกทีฟคืออะไร

การเขียนโปรแกรมเชิงรีแอกทีฟ คือการสร้างแอปพลิเคชันแบบอะซิงโครนัสที่ไม่บล็อกการทำงานและจัดการสตรีมข้อมูล

แทนที่จะคืนค่าโดยตรง เมธอดเชิงรีแอกทีฟจะคืนค่าตัวเผยแพร่ที่ส่งข้อมูลออกมาเรื่อย ๆ ผู้เรียกจะสมัครรับข้อมูลเพื่อรับข้อมูลนั้น

  • เธรดไม่ถูกบล็อกขณะรอ I/O
  • เหมาะอย่างยิ่งกับ service ที่มีการทำงานพร้อมกันสูงและเวลาแฝงต่ำ

Project Reactor

Spring WebFlux สร้างอยู่บน Project Reactor ซึ่งมีชนิดตัวเผยแพร่หลักสองชนิด:

  • Mono<T> — ส่งรายการ 0 หรือ 1 รายการ
  • Flux<T> — ส่งรายการตั้งแต่ 0 ถึง N รายการ

ทั้งสองชนิดนำอินเทอร์เฟซ Publisher ของ Reactive Streams ไปใช้

การสร้าง Mono

Mono แทนผลลัพธ์อะซิงโครนัสรายการเดียวหรือว่างเปล่า ใช้ Mono.just() สำหรับค่าที่ทราบอยู่แล้ว และใช้ Mono.empty() เมื่อไม่มีค่า

Mono<String> mono = Mono.just("Hello");
Mono<String> empty = Mono.empty();
mono.subscribe(value -> System.out.println(value));

การสร้าง Flux

Flux ส่งข้อมูลหลายรายการ สร้างจากค่า iterable หรือช่วงตัวเลขได้

Flux<String> flux = Flux.just("a", "b", "c");
Flux<Integer> range = Flux.range(1, 5);
flux.subscribe(item -> System.out.println(item));

จะไม่มีอะไรเกิดขึ้นจนกว่าจะสมัครรับข้อมูล

ตัวเผยแพร่มีลักษณะประเมินผลเมื่อจำเป็น pipeline จะไม่ทำงานจนกว่าจะมีบางสิ่งสมัครรับข้อมูล

การเรียก map() หรือ filter() เป็นเพียงการอธิบายงาน ข้อมูลจะไหลเมื่อเรียกใช้ subscribe() เท่านั้น

Flux<Integer> flux = Flux.range(1, 3)
    .map(i -> i * 10);
// no output yet
flux.subscribe(System.out::println); // now it runs

การแปลงด้วย map

map ใช้ฟังก์ชันแบบซิงโครนัสกับแต่ละรายการที่ส่งออกมา โดยแปลงแบบหนึ่งต่อหนึ่ง

Flux<String> names = Flux.just("alice", "bob")
    .map(name -> name.toUpperCase());
names.subscribe(System.out::println);

การกรองรายการ

filter จะเก็บเฉพาะรายการที่ตรงกับเพรดิเคต

Flux<Integer> evens = Flux.range(1, 10)
    .filter(n -> n % 2 == 0);
evens.subscribe(System.out::println);

Mono จาก Supplier

ใช้ Mono.fromSupplier() เพื่อเลื่อนการทำงานของฟังก์ชันที่สร้างค่าออกไปจนถึงเวลาสมัครรับข้อมูล

Mono<Long> now = Mono.fromSupplier(() -> System.currentTimeMillis());
now.subscribe(t -> System.out.println("Time: " + t));

การจัดการข้อผิดพลาด

pipeline เชิงรีแอกทีฟจะแจ้งข้อผิดพลาดเป็นเหตุการณ์สิ้นสุด ใช้ onErrorReturn เพื่อจัดหาค่าสำรอง

Mono<Integer> result = Mono.just("abc")
    .map(Integer::parseInt)
    .onErrorReturn(-1);
result.subscribe(System.out::println); // -1

คอลแบ็กของการสมัครรับข้อมูล

รูปแบบเต็มของ subscribe รับคอลแบ็กสามรายการ ได้แก่ onNext, onError และ onComplete

Flux.just(1, 2, 3)
    .subscribe(
        item -> System.out.println("Next: " + item),
        error -> System.err.println("Error: " + error),
        () -> System.out.println("Done")
    );

การบล็อกสำหรับการทดสอบ

ในการทดสอบหรือเมธอดหลักแบบง่าย คุณสามารถแปลงชนิดเชิงรีแอกทีฟเป็นชนิดที่บล็อกการทำงานได้ด้วย block() หรือ blockFirst()

หลีกเลี่ยง block() ในโค้ดเชิงรีแอกทีฟสำหรับใช้งานจริง เพราะจะทำลายรูปแบบที่ไม่บล็อกการทำงาน

String value = Mono.just("Hi").block();
Integer first = Flux.range(1, 5).blockFirst();

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับ Mono และ Flux

สรุปทบทวน

คุณได้เรียนรู้พื้นฐานการเขียนโปรแกรมเชิงรีแอกทีฟด้วย Project Reactor:

  • Mono ส่ง 0 หรือ 1 รายการ ส่วน Flux ส่งตั้งแต่ 0 ถึง N รายการ
  • ตัวเผยแพร่ประเมินผลเมื่อจำเป็น — จะไม่มีอะไรทำงานจนกว่าจะเรียก subscribe()
  • map และ filter ใช้อธิบายการแปลง
  • onErrorReturn จัดหาค่าสำรอง
เริ่มต้นได้ฟรี

เรียนรู้ Java ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
24
บทเรียน
93

คำถามที่พบบ่อย

บทเรียน “พื้นฐาน Mono และ Flux” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นฐาน Mono และ Flux” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Spring Boot 4 Microservices & REST APIs ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน Mono และ Flux”

ทำความเข้าใจตัวเผยแพร่แบบรีแอกทีฟ คุณปฏิบัติ Spring Boot 4 Microservices & REST APIs ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Spring Boot 4 Microservices & REST APIs หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Spring Boot 4 Microservices & REST APIs บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นฐาน Mono และ Flux” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Spring Boot 4 Microservices & REST APIs นี้ได้ไหม

ได้ บทเรียน Spring Boot 4 Microservices & REST APIs ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน Mono และ Flux
  2. คอนโทรลเลอร์แบบรีแอกทีฟ
  3. WebClient สำหรับการเรียกแบบรีแอกทีฟ
  4. แรงดันย้อนกลับและตัวดำเนินการ
← กลับไปที่ Spring Boot 4 Microservices & REST APIs