Açık kaynaklı Çin OSC manşetlerine dikkat edin ve en son teknik bilgileri alın
"Tekerleği yeniden icat etmeyin" denildiği gibi, gerekli olup olmadığını tartışmaya gerek yok.
Bu projeyi oluşturmanın temel amacı kendinizi geliştirmek, bilinen açık kaynak projeleriyle olan açığı görmek ve mükemmel açık kaynak yöntemlerini öğrenmektir.
Şimdi ağustosböceği projesinin temel işlevlerine odaklanalım.
Bunu hızlı, hafif bir WEB çerçevesi olarak tanımlıyorum; çok fazla bağımlılık olmadan, çekirdek kavanoz paketi sadece 30KB'dir.
Ayrıca bir HTTP hizmetini başlatmak için yalnızca bir kod satırı gerekir.
Şimdi birkaç önemli özellikten bahsedelim.
Mevcut sürüm temel olarak temel istek, yanıt, özel parametreler ve önleme işlevlerini uygular.
Birkaç işlevi olmasına rağmen, tüm iç organlara sahiptir.
Gelecekteki yineleme sürecinde, yukarıdaki işlev kademeli olarak geliştirilecektir.İyi bir fikriniz varsa, https://github.com/crossoverJie/cicada/issues gönderebilirsiniz.
Şimdi bir HTTP hizmetinin nasıl hızlı bir şekilde başlatılacağına bir göz atalım.
Sadece bir Maven projesi oluşturun ve çekirdek paketi içe aktarın.
< bağımlılık > < Grup kimliği > top.crossoverjie.opensource < /Grup kimliği > < yapı kimliği > ağustosböceği çekirdeği < /artifactId > < versiyon > 1.0.0 < /sürüm > < /bağımlılık >Yukarıdaki şekilde gösterildiği gibi, başka bir başlangıç sınıfı yapılandırın.
genel sınıf MainStart { public static void main(String args) InterruptedException { öğesini atar CicadaServer.start(MainStart.class,"/cicada-example"); } }Elbette iş mantığını uygulayacak bir yere de ihtiyacımız var. ağustosböceği bir arabirim sağlar, yalnızca belirli mantığı uygulamak için arabirimi uygulamanız gerekir.
top.crossoverjie.cicada.server.action.WorkAction arabirimini uygulamak için bir iş eylemi oluşturun.
@CicadaAction(değer = "demoAction") public class DemoAction, WorkAction'ı uygular { özel statik final Logger LOGGER = LoggerBuilder.getLogger(DemoAction.class) ; özel statik AtomicLong dizini = yeni AtomicLong() ; @Geçersiz kıl kamu çalışmasıRes < DemoResVO > yürütmek(Param paramMap) İstisna { Dize adı = paramMap.getString("isim"); Tamsayı kimliği = paramMap.getInteger("id"); LOGGER.info("isim=,id=" , isim,kimlik); DemoResVO demoResVO = yeni DemoResVO() ; demoResVO.setIndex(index.incrementAndGet()); İş Çözünürlüğü < DemoResVO > res = yeni WorkRes(); res.setCode(StatusEnum.SUCCESS.getCode()); res.setMessage(StatusEnum.SUCCESS.getMessage()); res.setDataBody(demoResVO) ; dönüş res; } }Aynı zamanda, özel sınıfa @CicadaAction ek açıklamasını eklemeniz ve esas olarak yönlendirme istenirken işletme sınıfını bulmak için bir değer belirtmeniz gerekir.
Uygulamayı bu şekilde başlatın ve erişin
İş mantığını çalıştırabilir ve aynı anda sunucudan geri dönüş alabilirsiniz.
Şu anda, json yanıtı varsayılan olarak desteklenmektedir ve şablon ayrıştırma daha sonra eklenecektir.
İlgili günlükler de hizmette yazdırılır.
Buradaki tüm istek parametreleri Param'da kapsüllenmiştir ve istek verilerini elde etmek için çeşitli API'ler kullanılabilir.
Esnek olmanın nedeni: Hatta şöyle de talep edebiliriz:
{ "yaş": 22, "isim": "zhangsan" }Bu şekilde, iş işleme sırasında ayrıştırıldığı sürece herhangi bir yapıya ait veriler iletilebilir.
Interceptor, günlük kaydı ve işlem gönderimi gibi ortak görevleri uygulamak için kullanılabilen bir çerçevenin temel işlevidir.
Cicada bunun için bir arayüz sağlar: top.crossoverjie.cicada.server.intercept.CicadaInterceptor.
Engelleme işlevini yazmak için yalnızca bu arabirimi uygulamamız gerekir:
@Interceptor(değer = "executeTimeInterceptor") public class ExecuteTimeInterceptor, CicadaInterceptor'ı uygular { özel statik final Logger LOGGER = LoggerBuilder.getLogger(ExecuteTimeInterceptor.class); özel Uzun başlangıç; özel Uzun uç; @Geçersiz kıl public void Before(Param param) { start = System.currentTimeMillis(); } @Geçersiz kıl public void after(Param param) { bitiş = System.currentTimeMillis(); LOGGER.info("yayın süreleri", bitiş - başlangıç); } }Buradaki gösteri, tüm eylemlerin yürütme süresini kaydetmektir.
Şu anda, varsayılan olarak yalnızca eylem müdahalesi uygulanmaktadır ve özel önleyiciler daha sonra eklenecektir.
Durdurucuda önce/sonra yöntemleri sağlanmış olsa da, tüm yöntemlerin uygulanması gerekmez.
Yani ağustosböceği bir adaptör sağlar:
top.crossoverjie.cicada.server.intercept.AbstractCicadaInterceptorAdapter
Aşağıdaki yöntemlerden birini isteğe bağlı olarak uygulamak için ondan miras almamız gerekiyor:
@Interceptor(değer = "loggerInterceptor") public class LoggerInterceptorAbstract, AbstractCicadaInterceptorAdapter'ı genişletir { özel statik final Logger LOGGER = LoggerBuilder.getLogger(LoggerInterceptorAbstract.class) ; @Geçersiz kıl public void Before(Param param) { LOGGER.info("logger param=",param.toString()); } }Bir HTTP hizmet çerçevesi olduğu için performans doğal olarak garanti edilmelidir.
Test koşulları şunlardır: İki tur için 300 eşzamanlı sürekli basınç testi; 1G bellek, tek çekirdekli CPU, 1Mbps. Jmeter ile basınç ölçümü aşağıdaki gibidir:
Sonuçları görmek için aynı sunucu Tomcat ile test edilir.
Tomcat'in iş parçacığı havuzu yapılandırması:
< Yürütücü adı="tomcatThreadPool" namePrefix="tüketici-yürütme-" maxThreads="510" minSpareThreads="10"/ >Sonuç, ağustosböceği performansının Tomcat'inkinden daha güçlü olduğu görünse de, burada istediğim şey Tomcat'in bir doc dizini.
Ama aslında bu karşılaştırma sürecindeki değişkenler tam olarak kontrol edilmiyor.Tomcat'in döndürdüğü HTML, cicada'nın ise sadece json döndürdüğü.Tabii ki sorun bundan daha fazlası.
Ama yine de ağustosböceğinin mevcut performansının hala iyi olduğunu gösteriyor.
Bu yazıda cicada'nın uygulama prensibi çok fazla tartışılmamaktadır.Eğer ilgileniyorsanız, nispeten basit olan kaynak koduna bakabilirsiniz.
Bu, sonraki bir güncellemede daha ayrıntılı olarak tartışılacaktır.
Aynı zamanda, ağustosböceğinin güncellenmeye devam etmesi ve gelecekte daha pratik işlevlerin eklenmesi şaşırtıcı değildir.
Ben bile doğru zamanda prodüksiyon projeme uygulayacağım ve umarım daha fazla arkadaş katılıp bu "tekerleği" daha iyi hale getirebilir.
Blogger: crossoverJie
Günlük blog sütunu, her gün sizin için mükemmel blog yazarlarından yüksek kaliteli teknik makaleler önerir. Aynı zamanda, kullanıcılar katkıda bulunabilirler.Makale resmi hesaba eklendiğinde, web sitesinin ana sayfasında ve diğer yerlerde tavsiye edeceğiz. odaklan Açık Kaynak Çin OSC Her gün yüksek kaliteli push bildirimleri almak için " daha fazla bilgi edin " proje adresini görüntülemek için.