พื้นฐาน Mono และ Flux
ทำความเข้าใจตัวเผยแพร่แบบรีแอกทีฟ
พื้นฐาน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Mono และ Flux
- คอนโทรลเลอร์แบบรีแอกทีฟ
- WebClient สำหรับการเรียกแบบรีแอกทีฟ
- แรงดันย้อนกลับและตัวดำเนินการ