Pemrograman responsif telah populer di kalangan komunitas pengembang dan pelanggan dalam beberapa tahun terakhir karena kemampuannya untuk membangun aplikasi dengan cara deklaratif daripada memaksa mereka untuk membentuk aplikasi yang lebih sensitif dan tangguh. Fakta bahwa Spring 5 menggabungkan sistem reaksi ke dalam kerangka kerja intinya telah menunjukkan pergeseran paradigma ke pemrograman deklaratif.
Pemrograman responsif mengelola aliran data yang tidak sinkron antara produsen data dan konsumen, yang perlu menanggapi data dengan cara yang lancar. Oleh karena itu, pemrograman responsif adalah aplikasi yang mulus yang asinkron dan digerakkan oleh peristiwa, yang membutuhkan sejumlah kecil utas untuk skala.
Pemrograman responsif sulit untuk membangun arsitektur berbasis utas karena kompleksitas tinggi yang terlibat dalam perluasan aplikasi berdasarkan keadaan yang dapat berubah, utas, dan kunci bersama.
Dalam konteks pemrograman responsif, "ketika ada data dalam aliran, semuanya adalah aliran dan berperilaku dengan cara yang mulus."
Abstraksi tingkat tinggi dan pemrograman responsif mengarah pada peningkatan keterbacaan kode, sehingga pengembang dapat fokus terutama pada interdependensi peristiwa yang mendefinisikan logika bisnis.
Dalam lingkungan yang sangat bersamaan, pola respons secara alami cocok untuk pemrosesan pesan, yang merupakan kasus penggunaan perusahaan umum.
Karena sifat tekanan balik eksekusi, pendekatan responsif paling cocok untuk mengontrol lalu lintas antara produsen dan konsumen, yang akan membantu menghindari kelelahan memori.
Untuk satu atau beberapa utas, tugas pengikatan IO dapat dieksekusi secara asinkron dan tidak blokir tanpa memblokir utas saat ini.
Pemberitahuan beberapa subsistem koneksi dapat dipicu dalam aplikasi interaksi dan real-time yang tinggi atau operasi/peristiwa apa pun, dalam hal ini pemrograman responsif dapat dikelola lebih efisien.
"Aliran respons" mendefinisikan spesifikasi API yang berisi serangkaian antarmuka minimal yang mengungkapkan metode untuk mendefinisikan operasi dan entitas aliran data yang merupakan tekanan balik yang tidak diblokir.
Dengan diperkenalkannya tekanan punggung, aliran respons memungkinkan pengguna untuk mengontrol nilai tukar data dari penerbit.
Streaming respons API java.util.concurrent.flow telah secara resmi menjadi bagian dari Java 9.
Aliran respons terutama digunakan sebagai lapisan interoperabilitas.
Baik modul Spring-Web-Reactive dan Spring MVC mendukung pemrograman @Controller yang sama, tetapi Spring-Web-Reactive dieksekusi pada mesin reaktif dan non-blocking.
Ikuti dokumen ini, lihat:
http://docs.spring.io/spring-framework/docs/5.0.0.build-snapshot/spring-framework-reference/html/web-reactive.html
The Spring-Web-Reactive module and Spring MVC share many common algorithms, but the Spring-Web-Reactive module has redefined many Spring MVC contracts, such as HandlerMapping and HandlerAdapter, to make them asynchronous and non-blocking, and to enable responsive HTTP requests and responses (in the form of RouterFunction and HandlerFunction).
Selain restemplate yang ada, WebClient responsif baru juga diperkenalkan pada musim semi 5.
Klien HTTP yang mendukung pemrograman responsif (seperti Reactor, Netty, Undertow) telah mengadopsi serangkaian abstraksi klien yang responsif dan klienhttpresponse abstraksi yang mengekspos permintaan permintaan dan respons sebagai fluks <dasabuffer> dan memberikan dukungan backsure yang komprehensif pada sisi membaca dan menulis.
Kerangka kerja Spring 5 memperkenalkan reaktor sebagai implementasi spesifikasi aliran reaktif.
Reactor adalah perpustakaan reaktif generasi berikutnya untuk membangun aplikasi non-blocking di JVM.
Reaktor memperluas kontrak penerbit aliran reaktif dasar dan mendefinisikan jenis fluks dan mono API untuk menyediakan operasi deklaratif untuk urutan data masing -masing 0..n dan 0..1.
Spring Web Reactive menggunakan Servlet 3.1 untuk menyediakan I/O yang tidak memblokir dan berjalan pada wadah Servlet 3.1.
Spring WebFlux menawarkan dua model pemrograman untuk dipilih.
Spring 5 termasuk Spring Web Reaktif (di bawah modul Spring-Web-Reactive) dan Spring Web MVC (di bawah modul Spring-Webmvc).
Meskipun Spring Web Reaktif dan Modul MVC Spring Web berbagi banyak algoritma, karena Spring Web Reaktif dapat berjalan pada stream reaktif non-blocking yang responsif HTTP Adapter Layer, mereka tidak berbagi kode di antara mereka.
Eksekusi MVC Spring membutuhkan wadah servlet, sementara Spring Web Reaktif juga dapat berjalan pada runtime non-servlet, seperti pada Netty dan Undertow.
Jika Anda perlu menggunakan tumpukan web non-blocking dengan kerangka kerja web yang ringan dan fungsional dan menggunakannya dengan Java 8 Lambda atau Kotlin, Anda harus mempertimbangkan untuk beralih dari aplikasi Spring MVC ke Spring Web Reaktif.
Ini adalah versi 2.0.0 m5 dari pom.xml yang bergantung pada webfiux.
<partent> <groupid> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-parent </artifactid> <version> 2.0.0.m5 </version> </boots/groupid> <groupid> org.springframework.boot </groupid> <grouptid> <groupid> <ArTifactId> Spring-boot-starter-webflux </stifactid> </dependency> </dependencies>
Metode tradisional vs. metode respons
Dalam metode tradisional, eksekusi akan diblokir dan akan menunggu sampai eksekusi layanan Anda selesai. Dalam kode berikut, setelah pernyataan cetak pertama, eksekusi program akan diblokir dan menunggu eksekusi layanan selesai. Setelah eksekusi layanan selesai, eksekusi program dilanjutkan dan pernyataan cetak kedua dijalankan.
@GetMapping ("/tradisional") Daftar publik <product> getAllproducts () {System.out.println ("cara tradisional dimulai"); Daftar <product> Produk = ProducerserService.getProducts ("Tradisional"); System.out.println ("cara tradisional lengkap"); mengembalikan produk;}Dalam metode respons, eksekusi program akan berlanjut tanpa menunggu penyelesaian eksekusi layanan. Dalam kode berikut, setelah pernyataan cetak pertama, pernyataan cetak kedua akan dieksekusi dengan cara yang tidak blokir tanpa menunggu eksekusi layanan untuk diselesaikan. Aliran fluks akan diisi dengan ketersediaan data produk.
@GetMapping (value = "/reactive", .text_event_stream_value) fluks publik <product> getAll () {System.out.println ("cara reaktif menggunakan fluks start"); Fluks <product> fluxproducts = prodservice.getproductsstream ("fluks"); System.out.println ("cara reaktif menggunakan fluks selesai"); mengembalikan fluxproducts;}Selain restemplate yang ada, Spring 5 juga memperkenalkan WebClient reaktif.
Abstraksi ClientHttPRequest dan ClientHttPresponse mengekspos Badan Permintaan dan Respons menggunakan Flux <databuffer> dan memberikan dukungan tekanan balik penuh pada sisi baca dan tulis.
Abstraksi encoder dan decoder dari Spring Core juga digunakan di sisi klien untuk membuat serialisasi atau mengirimkan endian flus ke objek jenis.
Berikut adalah contoh dari weblient reaktif yang memanggil terminal dan menerima dan memproses objek fluks aliran reaktif.
@GetMapping ("/Accounts/{ID}/ALERTS") PUBLIK FLUX <ERTERVER> GetAccountAlerts (@PathVariable Long ID) {WebClient WebClient = WebClient baru (baru reactorclientHttpConnector ()); kembalikan this.repository.getAccount (id) .flatMap (akun -> webclient.perform (get ("/alerts/{key}", account.getKey ())). Ekstrak (BodyStream (alert.class));}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.