Çerçeve şu anda Jingdong Uygulaması Arka Planı Zorlu, yüksek eşzamanlılık ve büyük kullanıcılar gibi karmaşık senaryoların incelenmesini ve test edilmesini kabul edin ve herhangi bir zamanda gerçek duruma göre güncellemeleri ve bugFix'i yayınlayın.
Blockchain ile ilgileniyorsanız, projenin yazarının Java Blockchain'in Altından Başlarken adlı başka bir GVP projesine başvurabilirsiniz.
Sadece bu çerçeveyi kullanmanız gerekiyorsa, lütfen okuyun. Bu çerçevenin adım adım nasıl uygulandığına dair derinlemesine bir anlayışa sahip olmanız gerekiyorsa, gereklilikleri almaktan her adımda düşünmeye, her sınıfın neden böyle tasarlandığını, neden bu yöntemlerin var olduğunu, yani bu çerçeveyi 0'dan 1'e nasıl geliştireceğinizi, yazar csdn, bu küçük çerçeve dahil ancak bununla sınırlı olmamak üzere ara yazılımın sıfırdan nasıl geliştirildiğinden bahsetmek için bir sütun açtı. JD.com'daki meslektaşlar ayrıca cf.'de erp'yi arayabilirler.
1 İstemci, diğer N mikro hizmetlerinin arabirimlerini çağırması gereken sunucu arabirimini ister
Örneğin, siparişimi talep ederseniz, kullanıcının rpc'sini, ürün ayrıntıları rpc'sini, envanter rpc'sini, kuponları ve diğer birçok hizmeti aramanız gerekir. Aynı zamanda bu servislerin karşılıklı bağımlılıkları da vardır.Örneğin, önce kullanıcının belirli bir alanını almalı, ardından veri talep etmek için belirli bir rpc servisine gitmelisiniz. Nihai edinme tamamlandıktan veya zaman aşımı sona erdikten sonra sonuçlar özetlenir ve müşteriye iade edilir.
2 N görevi paralel olarak yürütün ve ardından bu 1-N görevin yürütme sonuçlarına göre bir sonraki görevi yürütmeye devam edip etmeyeceğinize karar verin
Örneğin, kullanıcı e-posta, cep telefonu numarası ve kullanıcı adı ile giriş yapabilir ve sadece bir giriş arayüzü vardır.Kullanıcı bir giriş isteği başlattıktan sonra veritabanını aynı anda posta kutusu, cep telefonu numarası ve kullanıcı adına göre paralel olarak kontrol etmemiz gerekir.Bir başarılı olduğu sürece kabul edilir Başarılı olursa, sonraki adıma geçebilirsiniz. Önce e-posta adresini sonra cep telefonu numarasını denemek yerine ...
Diğer bir örnek ise, bir arayüzün her partide geçirilecek parametre miktarını sınırlamasıdır.En fazla 10 ürünün bilgisini her sorguladığımda, sorgulamak için 45 ürünüm var ve bunları paralel olarak 5 yığın halinde sorgulayabilir ve ardından 5 sorgu yığınını sayabilirim. sonuç. Bu, tüm kontrolleri başarılı olmaya zorlayıp zorlamamanıza veya kaç kontrol başarılı olursa olsun müşteriye geri dönmenize bağlıdır.
Başka bir örnek bir arayüz, işlenecek 5 ön görev var. Bunlardan üçünün takibi yürütmek için yürütülmesi gerekir, diğer ikisi isteğe bağlıdır.Bu üçü yürütüldüğü sürece bir sonraki adım gerçekleştirilebilir.O zaman, diğer ikisi başarılı olursa ve henüz yürütülmemişse değer kazanacaktır. Varsayılan değerdir.
3 İş parçacığı yalıtımı gerektiren çok toplu görevler
Birden çok görev grubu gibi, her görev grubu birbiriyle ilişkili değildir, her grubun bağımsız bir iş parçacığı havuzuna ihtiyacı vardır ve her grup, bağımsız bir yürütme birimleri kümesinin birleşimidir. Hystrix'in iş parçacığı havuzu izolasyon stratejisine biraz benzer.
4 Tek makineli iş akışı görev planlaması
5 Diğer ardışık gereksinimler
1 Birden fazla yürütme biriminin seri talebi
Birden çok yürütme birimi için 2 paralel istek
3 Bloklama bekletme, seri ve ardından çoklu paralel
4 Engelleme beklemede, birden fazla paralel yürütme tamamlandıktan sonra belirli bir tanesini yürütün
5 seri paralel bağımlılık
6 Karmaşık sahne
Geleneksel Future ve CompleteableFuture, görev planlamasını belirli bir dereceye kadar tamamlayabilir ve sonucu bir sonraki göreve aktarabilir. Örneğin, CompletableFuture'un bir yöntemi vardır, ancak her yürütme birimini geri arayamaz. Örneğin, A başarılı bir şekilde yürütüldü, ardından B eklendi. Umarım A'nın yürütmeden sonra bir geri arama sonucu alacağını, böylece mevcut yürütme durumunu izleyebilir veya bir günlük oluşturabilirim. Başarısız olursa, bir istisna mesajı veya başka bir şey de kaydedebilirim.
Bu noktada CompleteableFuture güçsüzdür.
Benim çerçevem böyle bir geri arama işlevi sağlar. Ve yürütme anormalse veya zaman aşımına uğradıysa, yürütme birimini tanımlarken varsayılan değeri ayarlayabilirsiniz.
Yukarıdaki Şekil 3'te gösterildiği gibi, A ve B eşzamanlı olarak ve sonunda C'yi çalıştırır.
Bazı senaryolarda, C'nin hem A hem de B yürütüldükten sonra yürütülebileceğini umuyoruz. Bunu yapmak için CompletableFuture'da allOf (futures ...]. Then () yöntemi vardır.
Bazı senaryolarda, A veya B yürütüldükten sonra C'yi yürütmek isteriz. CompletableFuture'da bunu yapabilen anyOf (futures ...). Then () yöntemi vardır.
Çerçevem de benzer işlevler sağlar.Sarmalayıcıda addDepend bağımlılığını ayarlayarak, bağımlı görevin yürütülmesi gerekip gerekmediğini belirtebilirsiniz. Bağımlılık yürütülmesi gereken şeyse, kendisini çalıştırmadan önce tüm bağımlılıkların yürütülmesini beklemesi gerekir.
Bağımlılıkların hiçbiri zorunlu değilse, bağımlılıklardan herhangi biri çalıştırılabilir ve kendiniz çalıştırabilirsiniz.
Not: Bu bağımlılık, gerekli olan ve olmayan olmak üzere ikiye bölünmüştür.Diğer önemli bir şey de yürütme biriminin tekrar tekrar çalıştırılamamasıdır. Örneğin, Şekil 4'te gösterildiği gibi, eğer B yürütülürse ve sonra A çalıştırılırsa, sonunda C çalıştırılır ve sonra A'ya ulaşılır. Şu anda, A'nın zaten yürütülmekte olduğunu veya tamamlandığını (başarısız olduğunu) göreceksiniz, o zaman yürütmeyi tekrar etmemelisiniz A.
Aşağıdaki şekilde gösterildiği gibi başka bir senaryo daha var, A ve D paralel olarak başlar, önce D yürütülür ve Sonuç görevi yürütülür Bu sırada B ve C henüz başlamamış ve sonra Sonuç yürütülmüştür.B ve C yürütülmemiş olmasına rağmen yürütülmüştür. Yürütmeye gerek yok. Görev B ve C atlanabilir. Atlama prensibi, NextWrapper'ın zaten bir sonuca sahip olması veya zaten çalışıyor olmasıdır. Kontrol etmek için checkNextWrapperResult yöntemini sağlıyorum, aşağıdaki görevler yürütüldüğünde, yine de mantık kontrolünü yürütmem gerekiyor. Tabii ki, bu kontrol yalnızca bir nextWrapper ile sınırlıdır.
Örneğin, A-B-C'nin üç yürütme birimi vardır. A'nın giriş parametresi String'dir ve çıkış parametresi int'dir. B için, girdi parametresi olarak A'nın sonucunu kullanması gerekir. Diğer bir deyişle, A ve B bağımsız değildir, ancak sonuçlara bağlıdır.
A yürütülmeden önce, B sonucu alamaz, ancak A'nın sonuç türünü bilir.
Benim çerçevem de bu tür senaryoları destekliyor. Yerleşim sırasında B'nin girdi parametresi olarak A'nın sonuç paketleme sınıfını alabilirsiniz. Şu anda çalıştırılmamış olmasına rağmen boş olması gerekir, ancak A yürütüldükten sonra B'nin katılımının atanacağı garanti edilebilir.
Bir grup görev için, her bir dahili yürütme biriminin süresi kontrol edilemez olsa da, tüm grubun yürütme süresini belirli bir değeri aşmayacak şekilde kontrol edebilirim. TimeOut ayarlanarak, tüm grubun yürütme eşiği kontrol edilir.
Çerçeve baştan sona açılmıştır ve onu kilitleyecek yer yoktur.
Daha az iş parçacığı oluşturun.
Bu şekilde, A, B ve C'nin ek iş parçacıkları oluşturmadan daha yavaş çalıştığı birimin iş parçacığı üzerinde çalışacaktır.
Herhangi bir çok iş parçacıklı paralel, seri, engelleme, bağımlılık ve geri arama eşzamanlılık çerçevesini çözün.Her iş parçacığının yürütme sırası, tam bağlantı geri arama ve zaman aşımı kontrolü ile isteğe bağlı olarak birleştirilebilir.
Bunların arasında, A, B ve C sırasıyla minimum bir yürütme birimidir (işçi), bu zaman alıcı bir kod parçası, bir Rpc çağrısı vb. Olabilir ve yaptığınız şeyle sınırlı değildir.
Çerçeve, bu çalışanları istediğiniz çeşitli yürütme emirlerinde birleştirebilir ve düzenleyebilir. Sonunda sonucu aldım.
Ve çerçeve Her çalışan için yürütme başarısızlıklarından sonra yürütme sonuçları için geri aramalar ve özel varsayılan değerler sağlayın . Örneğin, A yürütüldükten sonra, A'nın dinleyicisi, A'nın yürütme sonucuyla (başarı, zaman aşımı, istisna) bir geri arama alacaktır.
İhtiyaçlarınıza göre yürütme birimleri birleştirildikten sonra ana iş parçacığı üzerinde çalışmaya başlar ve sonuncusu çalıştırılana kadar bloklanır. Ve Tüm grup için zaman aşımı süresini ayarlayabilirsiniz .
Çerçeve, önceki yürütme birimlerinin sonuçlarını kendi girdi parametreleri olarak almak için aşağıdaki yürütme birimlerini destekler . Örneğin, yürütme biriminizin B giriş parametresi ResultA ise ve ResultA, A'nın yürütme sonucuysa, bu da desteklenebilir. Düzenlemede, B veya C'nin giriş parametresi, A bu anda henüz çalışmaya başlamamış olsa bile, A'nın sonucu olarak önceden ayarlanabilir. A yürütüldüğünde, sonucu doğal olarak B'nin girdi parametrelerine geçirecektir.
Çerçeve boyunca kilidi açılır.