Uçak biletlerinin yurt içi ana sistem yeniden yapılandırmasında RxJava öğrenme ve deneyim paylaşımı

Sistemde aşağıdaki sorunlar var mı?

Kod karmaşık ve süreç net değil

1. Sistem mantığı karmaşıktır;

2. Çok fazla işletme, sistem kodlarının sürekli birikmesine yol açar;

3. Yeni gelenlerin başlaması zordur;

4. Eski mantığın sık sık taranması gerekir.

İş hızla değişir

İş eklemeleri ve işletmeler arası bağımlılık değişiklikleri, çok sayıda kodun sık sık ayarlanmasına neden olur.

Eşzamansız iç içe geçmiş geri arama

Zaman uyumsuz ve paralel yöntemlerin istek süresini azaltmak için kullanılması gerekir, ancak eşzamansız iç içe geçmiş geri aramaları yazmanın yolu sıkıcıdır.

Böyle bir çerçeveye ihtiyaç var mı?

RxJava + Lambda + StreamAPI

Kısa sözdizimi, güçlü işlevler

Kısa, kompakt ve zengin işlevler çoğu uygulama senaryosunun üstesinden gelebilir.

Okunabilir, bakımı yapılabilir, genişletilebilir

1. Düşük kod bağlantısı;

2. Yüksek yeniden kullanılabilirlik;

3. Verilerin tersine çevrilmesini temizleyin;

4. Yeni başlayanlar için daha düşük öğrenme maliyetleri;

5. Küçük işletme değişiklikleri.

Uygun asenkron çağrı

Kolayca eşzamansız ve sonuç alın, artık geri aramalardan ve engellemelerden rahatsız değil.

RxJava nedir?

ReactiveX

1. ReactiveX'in Tarihçesi: ReactiveX, genellikle Rx olarak kısaltılan Reactive Extensions'ın kısaltmasıdır. Başlangıçta LINQ'nun bir uzantısıdır. Microsoft mimarı Erik Meijer liderliğindeki bir ekip tarafından geliştirilmiştir. Kasım 2012'de açık kaynaklı olmuştur. Rx bir programlama modelidir. Amaç, geliştiricilerin eşzamansız veri akışlarını daha rahat bir şekilde işlemesine yardımcı olmak için tutarlı bir programlama arabirimi sağlamaktır.

2. RX, eşzamansız olaylar için oluşturulmuş ve ayrıca özellikle toplama için oluşturulmuştur.

RxJava

1. Microsoft tarafından verilen tanım şudur: Rx, geliştiricilerin gözlemlenebilir diziler ve LINQ tarzı sorgu operatörleri kullanarak eşzamansız ve olay tabanlı programlar yazmasına olanak tanıyan bir işlev kitaplığıdır.

2. ReactiveX.io tarafından verilen tanım şöyledir: Rx, eşzamansız programlama için gözlemlenebilir veri akışlarını kullanan bir programlama arayüzüdür.

3. RxJava, ReactiveX'in Java üzerindeki uygulamasıdır.

RxJava olgundur ve topluluk oldukça aktiftir

RxJava2

RxJava1, RxJava2 ile karşılaştırıldığında:

(1) Reaktif Akışlar spesifikasyonuna uyun ve yeniden uygulayın.

(2) Null'dan kaçının.

RxJava avantajları ve uygulanabilir senaryolar

Çerçeve özellikleri

1. Kod basitleştirilebilir;

2. Eşzamansız bir çerçeve olarak kullanılabilir;

3. Herhangi bir çerçeve ile uygulanabilir.

İşlevsel stil

Programdaki karmaşık durumlardan kaçınarak, gözlemlenebilir veri akışları için yan etkisiz giriş ve çıkış işlevlerini kullanın.

Basitleştirilmiş kod

Gözlemlenebilir veri akışları için yardımsız Rx operatörlerinin kullanılması, genellikle işlevin giriş ve çıkış işlevlerini azaltabilir, karmaşık sorunlardan kaçınarak ve birkaç program satırına basitleştirebilir.

Eşzamansız hata işleme

Geleneksel dene / yakala eşzamansız hesaplamaları işleyemez.Rx uygun bir hata işleme mekanizması sağlar.

Eşzamanlılık kullanımı kolay

Rx'in Gözlemlenebilirleri ve Zamanlayıcıları, geliştiricilerin temelde yatan iş parçacığı senkronizasyonundan ve çeşitli eşzamanlılık sorunlarından kurtulmasına olanak tanır.

Duyarlı programlama

1. Duyarlı programlama, veri akışına ve değişimin yayılmasına yönelik bir programlama paradigmasıdır.

2. Gözlemci modunu kullanın.

3. Veri akışına yönelik programlama:

(1) Oluşturma: olay akışı ve veri akışı kolayca oluşturulabilir;

(2) Kombinasyon: veri akışlarını birleştirmek ve dönüştürmek için sorgu operatörlerini kullanın;

(3) İzleme: Herhangi bir gözlemlenebilir veri akışına abone olabilir ve işlemleri gerçekleştirebilirsiniz.

4. RxJava'daki her operatör, bir yayınlama aboneliğine ve veri aktarım sürecine karşılık gelir.

Kullanılan sistemler ve senaryolar

İş mantığı, hızlı değişiklikler

(1) Tüm sistem son derece birleştirilebilirdir;

(2) Karmaşık mantık, düşük kuplaj ile koda ayrıştırılabilir;

(3) Yüksek yeniden kullanılabilirlik ile birleştirilebilir.

Daha fazla eşzamansız senaryo

(1) İç içe geçmiş eşzamansız geri aramaları etkili bir şekilde azaltın;

(2) Konuları esnek bir şekilde değiştirin ve asenkron görevleri gerçekleştirin;

(3) Zaman aşımı ve istisna işleme zaman uyumsuz görevler için ayarlanabilir.

Yüksek kod karmaşıklığı ve zayıf bakım kolaylığı

(1) İşlevsel tarz;

(2) Çok sayıda uygun operatör sağlayan duyarlı programlama.

Yakınsak sistem

(1) İş birleştirme için harici sistemleri çağırın;

(2) Birçok harici arayüz aranır.

RxJava öğrenin

çalışma yöntemi

Öğrenmenin maliyeti biraz yüksek, ancak daha fazla malzeme var

Reaktif programlama ile programlama fikirlerinin dönüşümü.

veri:

(1) Başlamak için yeni başlayanlar için API ve öğreticiler;

(2) Tekerleği sökün + kaynak kodunu dahili uygulamayı anlayın.

Yaygın operatörlere ve kullanım örneklerine giriş

Sadece

Belirtilen değeri yayan bir Gözlenebilirlik oluşturun.

Filtrele

Operatör, veri öğelerini test etmek için belirttiğiniz bir tahmin işlevini kullanır ve yalnızca testi geçen veriler yayınlanır.

Harita

Temel işlev, bir Gözlemlenebilir Öğeyi, belirli bir işlevsel ilişki yoluyla başka bir Gözlenebilir Öğeye dönüştürmektir.

Zip

Operatör, bu işlevi iki veya daha fazla Gözlemlenebilir tarafından yayınlanan veri öğelerini sıralı olarak birleştirmek için kullanan bir Önlenebilir döndürür ve ardından bu işlev tarafından döndürülen sonucu yayınlar. Bu işlevi katı bir sırada uygular. Yalnızca en az veri öğesini yayan Gözlenebilir kadar veri yayar.

Düz harita

Veri yayan bir Gözlenebilir Öğeyi birden çok Gözlemlenebilir Öğeye dönüştürün ve ardından bunlar tarafından yayılan verileri tek bir Gözlemlenebilirde birleştirin.

Zaman aşımı

Orijinal Gözlemlenebilir'in bir ayna görüntüsü için, belirli bir süre sonra hiçbir veri iletilmezse, bir hata bildirimi gönderecektir. Orijinal Gözlemlenebilir belirli bir süre boyunca herhangi bir veri yayınlamazsa, Zaman Aşımı operatörü bir onError bildirimiyle Gözlemlenebilir'i sonlandıracaktır.

Tutmak

OnErrorReturn Bir hata oluştuğunda, Observable'ın önceden tanımlanmış bir veri göndermesine ve normal şekilde sonlandırmasına izin verin.

İplik değiştirme

Yürütme iş parçacığını belirtmek için subscribeOn ve ObserverOn kullanın.

Abone OlOnObserver ve ObserveOnSingleObserver'ı oluşturarak, belirtilen Zamanlayıcıda orijinal Gözlemci'yi çalıştırın.

Eşzamansız çoklu görev sonuçları alın

Eşzamansız birden çok sonucu toplamak için zip kullanın.

Gerçekleştirme yöntemi

(1) Eşzamansız görevler ile eşzamanlı edinme ve işleme sonuçları arasındaki ilişki: yayınla-abone ol;

(2) Eşzamansız her görev tamamlandıktan sonra sayaç -1'dir;

(3) Sayaç 0 olduğunda, tüm görev sonuçları elde edilir, işlenir ve gözlemciye gönderilir.

RxJava sürecini kullanmanın deneyim paylaşımı

Yüksek öğrenme maliyetleri

sorun

Bir ekip içinde işbirliği içinde geliştirme yaparken, RxJava'yı sıfırdan öğrenmek pahalıdır.

çözüm

Basitçe kapsülleyebiliriz, sadece eşzamanlı kodu yazabilir ve eşzamansız arama sonucunu döndürmek için eşzamansız araç sınıfını kullanabiliriz. Bu sayede ekip içi öğrenme maliyeti düşürülür.

Elbette, araçları daha iyi kullanmak istiyorsanız, onları belirli bir anlayışa sahip olmalısınız.Öğrenme maliyetlerini düşürdükten ve geliştirmeye başladıktan sonra öğrenmeye zaman ayırmak hala gereklidir.

İplik kontrolü

sorun

RxJava'da varsayılan olarak 5 iş parçacığı havuzu vardır ve Zamanlayıcı olarak paketlenir.Eğer Zamanlayıcı belirtilmezse, tüm Java varsayılan iş parçacığı havuzunda çalıştırılacaktır. Aşağıdaki sorunlar olabilir:

(1) IO durumunda paylaşılan iş parçacığı havuzunda sorunlar olabilir;

(2) İş parçacıkları arasında bilgi aktarmanız gerektiğinde, özel bir kapsüllenmiş iş parçacığı havuzu kullanmanız gerekebilir;

(3) Yukarıda belirtilen operatörler arasında, birçok operatör yeni bir veri akışı yaratacaktır.Eğer iş parçacığı havuzu belirtilmezse, iş parçacığı havuzunu kontrol edilemez hale getirecek şekilde varsayılan iş parçacığı havuzunda çalıştırılacaktır.

çözüm

Birinci çözüm

(1) Kendi Zamanlayıcısında uygulanabilir ve kodun çalıştığı iş parçacığı havuzu manuel olarak belirtilir;

(2) Operatörlerin prensibini anlayın ve onları özetleyin.

İkinci çözüm

(1) Varsayılan iş parçacığı havuzunu değiştirin;

(2) RxJava giriş sağlamaz, bu nedenle onu kendiniz değiştirmeniz gerekir.

bazı tavsiyeler

1. Özel bir iş parçacığı havuzunda çalıştırmanız gerekiyorsa, yalnızca RxJava'yı zaman uyumsuz bir çerçeve olarak kullanmanız önerilir.

2. İstek bağlantısının tamamı RxJava kullanıyorsa:

(1) İş parçacığı havuzunun korunması gerekir;

(2) Sürekli değişen iş parçacığı havuzları, gereksiz iş parçacığı değiştirme ek yükünü getirir.

İstisna yakalama

RxJava, Catch operatörünün istisnaları yakalamasını sağlasa da, zaman uyumsuz iş parçacıklarındaki yığın bilgileri eksiktir.

Eşzamanlı kodda istisnaları yakalamaya çalışın.

Hata Ayıklama Hakkında

RxJava gözlemci modunu kullandığından, tüketim yalnızca veri akışı gerçekten üretildiğinde gerçekleşir.Gerçek mantık yürütme, veri akışını tanımlayan kod değil, tüketildiği zamandır.

RxJava veri akışının oluşturulduğu yerde değil, gerçek yürütme yerinde hata ayıklamanız gerekir.

Proje geliri

Yurtiçi ana uçak bileti sisteminin yeniden inşasında RxJava'yı kullandık.

Geliştirilmiş kod okunabilirliği ve bakımı

(1) Yeni gelenlerin başlaması için maliyet azaltma;

(2) Yeni talep yinelemesi daha hızlıdır;

(3) Sorun daha hızlı tespit edilebilir.

Süreç daha net

Dostça eşzamansız destekle, işlem performansı artırmak için mümkün olduğunca eşzamansızdır

Elbette, RxJava'yı tek başına kullanmak performansı iyileştiremez. Eşzamansızlaştırma temelinde şunları da yaptık:

(1) İş taraması;

(2) Küme bölünmesi ve birleşmesi;

(3) Önbellek optimizasyonu;

(4) G1'i çöp toplayıcı olarak kullanın;

(5) Tek makine performansını iyileştirin;

Yeni ve eski sistemlerin bağımsız basınç testinin karşılaştırılması.

sonuç olarak

RxJava2 + Java8 + Servlet3 kullanıldıktan sonra elde edilebilecek faydalar aşağıdaki gibidir:

1. Veri eğilimi açıktır: veri akışı odaklı.

2. Kod son derece okunabilir ve bakımı yapılabilir: kodu basitleştirin.

3. Uygun asenkron işlem: geri arama cehenneminden kaçının; iş parçacığı havuzunu değiştirmek için uygun.

4. Yüksek ölçeklenebilirlik: her eşzamansız görev bağımsızdır, birleştirilip yeniden kullanılabilir ve genişletilebilir.

RxJava'yı zaman uyumsuz bir çerçeve olarak kullanın

(1) Görevleri etkili bir şekilde paralel olarak yürütün ve yanıt süresini kısaltın;

(2) Verimi iyileştirmek için engelleme görevlerinin eşzamansız yürütülmesi;

(3) Eşzamansız görevlerin kombinasyonu esnektir ve hızlı iş değişiklikleriyle baş edebilir.

Lambda + StreamAPI kullanın

(1) Çok sayıda StreamAPI, farklı senaryoların ihtiyaçlarını karşılayabilir;

(2) Etkili ve özlü kod;

(3) Yüksek okunabilirlik.

Servlet'i eşzamansız olarak kullanın

Http iş parçacığı kaynaklarını serbest bırakın.

[Premier Lig] Her kurt kazanır! On kişilik Manchester United, Wolves'a 1-2 kaybetti, Smalling kendi başına
önceki
Kötü amaçlı yazılımlara dikkat edin! APP, bu şekilde kullanmak güvenlidir!
Sonraki
Nanshan Caddesi 2018 Huanchanwan Kanalı-Guimiao Kanalı Ekolojik Mutlu Koşu 900 Koşucu mutlu bir şekilde deniz taşına doğru koşuyor
Her kurt galip gelir! Smalling'in sahibi, Wolves'a on kişilik Manchester United 1-2 deplasmanında
Hindistan yine kapatıyor! Veri hızı aslında 5 yuan 1GB zarar veren Çin'dekinden çok daha düşük.
Koçlar yaramaz! Bir şişko Ronaldo'yu kutlamayı öğrenir, Ferguson çocuk gibi mutludur
[La Liga] İspanyol 1-1 Getafe 4 rauntta, Wu Lei tek bir atış kaybetti
Avrupa ve Amerika Birleşik Devletleri, Çin'in mobil ödeme artışına hayran kalıyor ve bunun cidden güncelliğini yitireceğinden korkuyor
Geçen yıl bir boşlukta savaşa girdi ve eski Manchester United kalecisinden boşandıktan sonra gözyaşları içinde kaldı.
Baoan "Çin Rüyası Kültürü Giriş Etkinliğimiz" ilk etkinliği gerçekleştirildi.
İlk yarı-Villarreal 1-2 Barcelona, Malcolm paslar ve şutlar
Girişimcilik | İnsansız raflar "zengin ve kayıp" akıllı konteynerler geri dönüyor, karşı koyabilirler mi?
China Mobile, Fetion'dan vazgeçemez ve kurumsal pazarda Jack Ma ile rekabet etmek istiyor
2018, bu yıl bu insanlar
To Top