Mikro Hizmet Mimarisi - Hızlı Kılavuz
Mikro hizmet, hizmet tabanlı bir uygulama geliştirme metodolojisidir. Bu metodolojide, büyük uygulamalar en küçük bağımsız hizmet birimlerine bölünecektir. Mikro hizmet, tüm uygulamayı, her hizmetin yalnızca bir iş ihtiyacına hizmet edeceği birbirine bağlı hizmetlerin bir koleksiyonu olarak bölerek Hizmet Odaklı Mimari (SOA) uygulama sürecidir.
Mikro Geçiş Kavramı
Hizmet odaklı bir mimaride, tüm yazılım paketleri küçük, birbirine bağlı iş birimlerine bölünecektir. Bu küçük işletme birimlerinin her biri, müşteriye başarılı bir iş sağlamak için farklı protokoller kullanarak birbirleriyle iletişim kuracak. Şimdi soru şu: Mikro Hizmet Mimarisi'nin (MSA) SOA'dan farkı nedir? Tek kelimeyle, SOA bir tasarım modelidir ve Mikroservice, SOA'yı uygulamak için bir uygulama metodolojisidir veya Microservice'in bir SOA türü olduğunu söyleyebiliriz.
Aşağıda, Mikro Hizmet odaklı bir uygulama geliştirirken aklımızda tutmamız gereken bazı kurallar verilmiştir.
Independent - Her mikro hizmet bağımsız olarak dağıtılabilir olmalıdır.
Coupling - Tüm mikro hizmetler, birindeki değişiklikler diğerini etkilemeyecek şekilde birbirine gevşek bir şekilde bağlanmalıdır.
Business Goal - Tüm uygulamanın her bir hizmet birimi en küçük olmalı ve belirli bir iş hedefini gerçekleştirme kapasitesine sahip olmalıdır.
Mikro hizmetleri derinlemesine anlamak için bir çevrimiçi alışveriş portalı örneğini ele alalım. Şimdi, bu E-ticaret portalının tamamını kullanıcı yönetimi, sipariş yönetimi, check-in, ödeme yönetimi, teslimat yönetimi vb. Gibi küçük işletme birimlerine ayıralım. Başarılı bir siparişin tüm bu modülleri belirli bir süre içinde tamamlaması gerekir. çerçeve. Aşağıda, bir elektronik ticaret sistemi ile ilişkili farklı iş birimlerinin birleştirilmiş görüntüsü verilmiştir.
Bu iş modüllerinin her birinin kendi iş mantığı ve paydaşları olmalıdır. Bazı özel ihtiyaçlar için diğer üçüncü taraf satıcı yazılımlarıyla ve ayrıca birbirleriyle iletişim kurarlar. Örneğin, sipariş yönetimi, kullanıcı bilgilerini almak için kullanıcı yönetimi ile iletişim kurabilir.
Şimdi, daha önce bahsedilen tüm bu iş birimleriyle çevrimiçi bir alışveriş portalı çalıştırdığınızı düşünürsek, ön uç, arka uç, veritabanı vb. Gibi farklı katmanlardan oluşan kurumsal düzeyde bazı uygulamalara ihtiyacınız var. Uygulamanız ölçeklenmemişse ve tamamen tek bir savaş dosyasında geliştirildiğinde, tipik bir monolitik uygulama olarak adlandırılacaktır. IBM'e göre, tipik bir monolitik uygulama, tüm kullanıcı isteklerini ele almaktan yalnızca bir uç nokta veya uygulamanın sorumlu olacağı dahili olarak aşağıdaki modül yapısına sahip olmalıdır.
Yukarıdaki görselde, farklı kullanıcıları ve iş verilerini depolamak için Veritabanı gibi farklı modüller görebilirsiniz. Ön uçta, genellikle kullanmak üzere kullanıcı veya iş verilerini oluşturduğumuz farklı bir cihazımız var. Ortada, kullanıcı sonundan gelen talebi kabul eden, kaynaklar yardımıyla işleyen ve tekrar kullanıcılara sunan, konuşlandırılabilir bir EAR veya WAR dosyası olabilen bir paketimiz var. İş yukarıdaki örnekte herhangi bir değişiklik isteyene kadar her şey yoluna girecek.
Uygulamanızı iş ihtiyaçlarına göre değiştirmeniz gereken aşağıdaki senaryoları göz önünde bulundurun.
İş biriminin "Arama" modülünde bazı değişikliklere ihtiyacı var. Ardından, tüm arama sürecini değiştirmeniz ve uygulamanızı yeniden dağıtmanız gerekir. Bu durumda, diğer birimlerinizi hiçbir değişiklik yapmadan yeniden dağıtıyorsunuz.
Şimdi yine iş biriminizin "Cüzdan" seçeneğini eklemek için "Çıkış" modülünde bazı değişikliklere ihtiyacı var. Şimdi "Teslim alma" modülünüzü değiştirmeli ve aynısını sunucuya yeniden dağıtmalısınız. Unutmayın, yazılım paketlerinizin farklı modüllerini yeniden dağıtıyorsunuz, ancak biz onda herhangi bir değişiklik yapmadık. Burada, daha çok Mikro hizmet mimarisine özgü hizmet odaklı mimari kavramı geliyor. Monolitik uygulamamızı, yazılımın her bir modülünün, tek bir iş görevini bağımsız olarak yerine getirebilen bağımsız bir birim olarak davranacağı şekilde geliştirebiliriz.
Aşağıdaki örneği düşünün.
Yukarıdaki mimaride, kompakt uçtan uca hizmet ile herhangi bir kulak dosyası oluşturmuyoruz. Bunun yerine, yazılımın farklı bölümlerini bir hizmet olarak ortaya koyarak bölüyoruz. Yazılımın herhangi bir parçası, ilgili hizmetleri tüketerek birbiriyle kolayca iletişim kurabilir. Mikro hizmet, modern web uygulamasında büyük bir rol oynar.
Mikro hizmet hattında alışveriş sepeti örneğimizi karşılaştıralım. Alışveriş sepetimizi "Ara", "Filtre", "Ödeme", "Alışveriş Sepeti", "Tavsiye" gibi farklı modüllere ayırabiliriz. Bir alışveriş sepeti portalı oluşturmak istiyorsak, Yukarıda belirtilen modüller, size 7x24 iyi bir alışveriş deneyimi sunmak için birbirine bağlanabilecek şekilde.
Avantajlar dezavantajlar
Aşağıda, monolitik bir uygulama kullanmak yerine mikro hizmet kullanmanın avantajlarına ilişkin bazı noktalar verilmiştir.
Avantajlar
Small in size- Mikro hizmetler, SOA tasarım modelinin bir uygulamasıdır. Hizmetinizi elinizden geldiğince saklamanız tavsiye edilir. Temel olarak, bir hizmet birden fazla iş görevini yerine getirmemelidir, bu nedenle boyut olarak küçük ve bakımı diğer monolitik uygulamalardan daha kolay olacaktır.
Focused- Daha önce de belirtildiği gibi, her mikro hizmet yalnızca bir iş görevi sunmak üzere tasarlanmıştır. Bir mikro hizmet tasarlarken, mimar, hizmetin sunulabilir olan odak noktasıyla ilgilenmelidir. Tanımı gereği, bir mikro hizmet doğası gereği tam yığın olmalıdır ve yalnızca bir işletme mülkü teslim etmeye kararlı olmalıdır.
Autonomous- Her mikro hizmet, tüm uygulamanın özerk bir iş birimi olmalıdır. Bu nedenle, uygulama daha gevşek bir şekilde bağlanır ve bu da bakım maliyetini düşürmeye yardımcı olur.
Technology heterogeneity- Microservice, geliştiricilerin doğru teknolojiyi doğru yerde kullanmalarına yardımcı olan tek bir iş biriminde birbirleriyle iletişim kurmak için farklı teknolojileri destekler. Heterojen bir sistem uygulayarak, maksimum güvenlik, hız ve ölçeklenebilir bir sistem elde edilebilir.
Resilience- Esneklik, bir yazılım birimini izole etmenin bir özelliğidir. Mikro hizmet, bina metodolojisinde yüksek düzeyde esnekliği takip eder, bu nedenle bir birim başarısız olduğunda tüm işi etkilemez. Esneklik, yüksek düzeyde ölçeklenebilir ve daha az bağlantılı sistemi uygulayan başka bir özelliktir.
Ease of deployment- Uygulamanın tamamı küçük birimlere bölündüğünden, her bileşen doğası gereği tam yığın olmalıdır. Hepsi, aynı türden diğer monolitik uygulamaların aksine, daha az zaman karmaşıklığı ile herhangi bir ortama çok kolay bir şekilde yerleştirilebilir.
Aşağıda mikro hizmet mimarisinin dezavantajlarına ilişkin bazı noktalar yer almaktadır.
Dezavantajları
Distributed system- Teknik heterojenlik nedeniyle, bir mikro hizmetin farklı bölümlerini geliştirmek için farklı teknolojiler kullanılacaktır. Bu büyük, heterojen dağıtılmış yazılımı desteklemek için çok sayıda yetenekli profesyonel gereklidir. Bu nedenle, dağıtılmış ve heterojenlik, mikro hizmet kullanmanın bir numaralı dezavantajıdır.
Cost - Mikro hizmet, farklı iş görevleri için farklı sunucu alanı sağlamanız gerektiğinden maliyetlidir.
Enterprise readiness- Mikro hizmet mimarisi, teknoloji her geçen gün geliştiği için farklı teknolojilerin bir kümesi olarak düşünülebilir. Bu nedenle, bir mikro hizmet uygulaması kuruluşunu geleneksel yazılım geliştirme modeliyle karşılaştırmaya hazır hale getirmek oldukça zordur.
SOA Üzerinden Mikro Hizmet
Aşağıdaki tablo, SOA ve Mikro Hizmetin belirli özelliklerini listeleyerek, SOA üzerinden mikro hizmet kullanmanın önemini ortaya çıkarmaktadır.
Bileşen | SOA | Mikro hizmet |
---|---|---|
Tasarım deseni | SOA, yazılım bileşenlerinin hizmetler biçiminde kullanım için dış dünyaya maruz kaldığı bilgisayar yazılımı için bir tasarım paradigmasıdır. | Mikro Servis, SOA'nın bir parçasıdır. SOA'nın özel bir uygulamasıdır. |
Bağımlılık | İş birimleri birbirine bağımlıdır. | Tüm iş birimleri birbirinden bağımsızdır. |
Boyut | Yazılım boyutu, geleneksel yazılımdan daha büyüktür. | Yazılım boyutu küçük. |
Teknoloji | Teknoloji yığını, Microservice'den daha azdır. | Mikro hizmet, belirli bir görevi gerçekleştirmek için kesin teknolojiler kullanıldığından, doğası gereği heterojendir. Mikro hizmetler, birçok teknolojinin bir araya gelmesi olarak düşünülebilir. |
Otonom ve Odaklanma | SOA uygulamaları, birden çok iş görevini gerçekleştirmek için oluşturulmuştur. | Mikro hizmet uygulamaları, tek bir iş görevini gerçekleştirmek için oluşturulmuştur. |
Doğa | Doğada monolitik. | Doğada tam yığın. |
Dağıtım | Dağıtım zaman alıcıdır. | Dağıtım çok kolaydır. Bu nedenle, daha az zaman alıcı olacaktır. |
Maliyet etkinliği | Daha uygun maliyetli. | Daha az maliyet etkin. |
Ölçeklenebilirlik | Mikro Hizmetlere kıyasla daha az. | Tam ölçekli. |
Misal | Bir çevrimiçi CAB rezervasyon uygulamasını ele alalım. Bu uygulamayı SOA kullanarak oluşturmak istiyorsak, yazılım birimleri -
|
Aynı uygulama mikro hizmet mimarisi kullanılarak oluşturulmuşsa, API'leri -
|
Ölçeklendirme, bir yazılımı farklı birimlerde parçalama işlemidir. Ölçekleme aynı zamanda ölçeklenebilirlik açısından da tanımlar. Ölçeklenebilirlik, uygulamanın daha gelişmiş özelliklerini uygulama potansiyelidir. Uygulamanın güvenliğini, dayanıklılığını ve sürdürülebilirliğini artırmaya yardımcı olur. Sektörlerde izlenen üç tür ölçeklendirme prosedürümüz var. Aşağıda, ilgili gerçek hayat örnekleriyle birlikte farklı ölçeklendirme metodolojileri verilmiştir.
X Ekseni Ölçeklendirme
X ekseni ölçeklendirmesine yatay ölçekleme de denir. Bu prosedürde, uygulamanın tamamı farklı yatay bölümlere ayrılmıştır. Normalde, herhangi bir web sunucusu uygulaması bu tür bir ölçeklendirmeye sahip olabilir. Aşağıdaki şekilde gösterildiği gibi yatay ölçeklendirmeyi izleyen normal bir MVC mimarisini düşünün.
Örnek olarak, herhangi bir JSP servlet uygulamasını düşünebiliriz. Bu uygulamada, kontrolör her talebi kontrol eder ve gerektiğinde modelle iletişim kurarak görünüm oluşturur. Normalde monolitik uygulamalar bu ölçeklendirme yöntemini takip eder. X Ekseni ölçeklendirme doğası gereği çok basittir ve çok daha az zaman alır. Bu metodolojide, bir yazılım, birimin sorumlu olduğu farklı görevine bağlı olarak ölçeklenecektir. Örneğin, kontrolör gelen ve giden talebi kontrol etmekten sorumludur, görünüm, iş işlevselliğini tarayıcıdaki kullanıcılara temsil etmekten sorumludur, model ise verilerimizi saklamaktan sorumludur ve veri tabanı olarak çalışır.
Y Ekseni Ölçeklendirme
Y ekseni ölçeklendirme, herhangi bir kaynak düzeyi ölçeklendirmesini içeren dikey ölçeklendirme olarak da adlandırılır. Herhangi bir DBaaS veya Hadoop sistemi Y ekseni ölçeklendirilmiş olarak düşünülebilir. Bu tür ölçeklendirmede, bazı mantık uygulanarak kullanıcıların isteği yeniden yönlendirilir ve kısıtlanır.
Facebook'u örnek olarak ele alalım. Facebook'un her saniyede 1,79 milyon kullanıcıyı işlemesi gerekiyor; bu nedenle, trafiği kontrol etmek Facebook ağ mühendislerinin büyük bir sorumluluğudur. Herhangi bir tehlikenin üstesinden gelmek için, aynı anda aynı uygulama ile birden fazla sunucunun çalıştırılmasını içeren Y ekseni ölçeklendirmesini takip ederler. Şimdi bu büyük trafik seviyesini kontrol etmek için Facebook, bir bölgedeki tüm trafiği resimde gösterildiği gibi belirli bir sunucuya yönlendiriyor. Bölgeye göre bu trafik aktarımına mimari dilde yük dengeleme denir.
Kaynakları küçük bağımsız iş birimlerine ayırmanın bu yöntemi Y Ekseni ölçeklendirmesi olarak bilinir.
Z Ekseni Ölçeklendirme
X ve Y ekseni ölçeklendirmesinin anlaşılması çok daha kolaydır. Bununla birlikte, Z ekseni ölçeklendirme olarak adlandırılan bir uygulama işletme düzeyinde de ölçeklenebilir. Aşağıda, iş birimlerinin farklı dikeylerinde bir taksi hizmeti uygulamasının ölçeklendirilmesine bir örnek verilmiştir.
Ölçeklendirmenin Avantajları
Cost - Bir yazılımın uygun şekilde ölçeklendirilmesi, bakım maliyetini azaltacaktır.
Performance - Gevşek bağlantı nedeniyle, uygun şekilde ölçeklendirilmiş bir yazılımın performansı her zaman ölçeklenmemiş bir yazılımdan daha iyidir.
Load distribution - Farklı teknolojileri kullanarak sunucu yükümüzü kolaylıkla koruyabiliriz.
Reuse - Bir yazılımın ölçeklenebilirliği, yazılımın kullanılabilirliğini de artırır.
Mikro hizmet, SOA'yı dahili olarak uygular. Daha geniş anlamda, onu bir SOA uygulamasının bir alt kümesi olarak düşünebiliriz.
Kural ve İş Akışı
Mikro hizmet geliştirirken dikkat edilmesi gereken ilkeler aşağıdadır.
High Cohesion- Tüm iş modellerinin olabildiğince en küçük işletme bölümüne bölünmesi gerekir. Her hizmet yalnızca bir iş görevini yerine getirmeye odaklanmalıdır.
Independent - Tüm hizmetler doğası gereği tam yığın ve birbirinden bağımsız olmalıdır.
Business Domain Centric - Yazılım, iş birimine göre modüler hale gelecektir ve katman tabanlı değildir.
Automation- Test dağıtımı otomatikleştirilecektir. Minimum insan etkileşimi sağlamaya çalışın.
Observable - Her hizmet doğası gereği tam yığın olacak ve bir kurumsal uygulama gibi bağımsız olarak kurulabilir ve gözlemlenebilir olmalıdır.
Takım yönetimi
"İki Pizza Kuralı", bir mikro hizmet geliştirme ekibindeki katılımcıların sayısını sınırlayan bir tür kuraldır. Bu kurala göre bir uygulamanın ekip üyesi sayısı iki pizza ile beslenebilecek kadar küçük olmalıdır. Genel olarak, sayı 8'den fazla olmamalıdır. Mikro hizmet doğası gereği tam yığın olduğundan, ekip de doğası gereği tam yığınlıdır. Verimliliği artırmak için, bu hizmet için gerekli her türlü uzmanlığa sahip maksimum 8 kişilik bir ekip oluşturmamız gerekiyor.
Görev yönetimi
Görev, yazılım geliştirme yaşam döngüsünde önemli bir roldür. Büyük ölçekli bir uygulama geliştirmek, birkaç küçük görev birimine bölünebilir. Facebook gibi bir uygulama geliştirmemiz gerektiğini düşünelim. Ardından, "Oturum aç" işlevi tüm oluşturma sürecinin bir görevi olarak düşünülebilir. Bu görevlerin her biri için ilerleme, yüksek vasıflı profesyoneller tarafından düzgün bir şekilde izlenmelidir. Çevik, iyi görev yönetimine ayak uydurmak için endüstrilerde izlenen iyi bilinen süreç yapısıdır.
Şimdiye kadar Microservice'in ne olduğunu ve modern MVC mimarisinin üzerinde temel ihtiyaçlarının neler olduğunu öğrendik. Bu bölümde, bu mimarinin bir hizmet için eşit derecede önemli olan farklı unsurlarını öğreneceğiz.
Hizmet Kategorileri
Microservice adıyla HTTP protokolleri üzerinden tüketilebilecek bir servis olacağını varsayıyoruz, ancak bu mimari kullanılarak ne tür servisler oluşturulabileceğini bilmemiz gerekiyor. Aşağıda, Microservice mimarisi kullanılarak uygulanabilecek hizmetlerin listesi verilmiştir.
Platform as a Service [PaaS]- Bu hizmet odaklı mimaride platform, iş ihtiyaçlarına göre özelleştirilebilen bir araç olarak verilmektedir. PaaS, mobil uygulama geliştirmede önemli bir rol oynar. PaaS'ın en büyük örneği, Google'ın uygulamanızı oluşturmak için farklı ve kullanışlı bir platform sağladığı Google App motorudur. PaaS, başlangıçta geliştiricilere yerleşik bir mimari veya altyapı sağlamak için geliştirildi. Önemli ölçüde azaltılmış sürede yüksek seviyeli programlama karmaşıklığını azaltır. Aşağıda, Google'ın sağladığı PaaS'nin anlık görüntüsü bulunmaktadır.
Software as a Service [SaaS]- Hizmet Olarak Yazılım, yazılımın merkezi olarak barındırıldığı ve abonelik temelinde lisanslandığı bir yazılım lisanslama işidir. SaaS'ye esas olarak tarayıcı üzerinden erişilebilir ve İnsan Kaynakları Yönetimi (İKY), Kurumsal Kaynak Planlaması (ERP), Müşteri İlişkileri Yönetimi (CRM), vb. Gibi birçok iş dikeyinde çok yaygın bir mimari modeldir. Aşağıdaki ekran görüntüsü örnekleri göstermektedir. Oracle tarafından sağlanan farklı SaaS.
Infrastructure as a Service [IaaS]- Altyapı, BT endüstrilerinde iyi bir rol oynar. Bulut bilişim kullanan bazı kuruluşlar, hizmetleri olarak sanal altyapı sağlar. IaaS, yazılım geliştirmede çeviklik, maliyet etkinliği, güvenlik, performans, üretkenlik vb. Sağlamak için çok faydalıdır. Amazon EC2 ve Microsoft Azure, IaaS'nin en büyük örnekleridir. Aşağıdaki resimde, veri merkezinin IaaS olarak sağlandığı bir AWS örneği gösterilmektedir.
Data as a Service [DaaS]- Bilgi teknolojisi verilerle ilgilenir ve üst düzey endüstri liderlerinden bazıları verilerin toplumun yeni dayanağı olacağına inanır. DaaS, verilerin araştırma ve analiz için iş gruplarıyla paylaşıldığı bir hizmet türüdür. DaaS, veri erişim katmanında basitlik, çeviklik ve güvenlik sağlar. Aşağıda, kendi iş ihtiyaçlarınız için erişilebilen veya lisanslanabilen bir Oracle Data Cloud örneği verilmiştir.
Back End as a Service [BaaS]- BaaS, hizmet olarak mobil arka uç anlamına gelen MBaaS olarak da bilinir. Bu tür bir hizmette, uygulamanın arka ucu, kendi iş girişimleri için iş birimlerine sağlanacaktır. Tüm anlık bildirimler, sosyal ağ hizmetleri bu tür hizmetlerin kapsamına girer. Facebook ve Twitter, tanınmış BaaS servis sağlayıcılarının örnekleridir.
Güvenlik
Tonlarca müşteri verisiyle uğraşmak söz konusu olduğunda, güvenlik önemli bir rol oynar. Güvenlik sorunu, piyasada bulunan her türlü hizmetle ilişkilidir. Kullandığınız bulut ne olursa olsun - özel, genel, hibrit vb., Güvenlik her düzeyde korunmalıdır. Tüm güvenlik sorunu genel olarak aşağıdaki bölümlere ayrılabilir -
Security issue faced by service providers - Bu tür bir güvenlik sorunu, Google, Amazon, vb. Gibi hizmet sağlayıcıları tarafından karşı karşıya kalmaktadır. Güvenlik korumasını sağlamak için, özellikle bulutun çekirdek kısmına doğrudan erişimi olanlar için istemcinin arka plan kontrolü gereklidir.
Security issue faced by consumers- Bulut maliyet dostudur, bu nedenle endüstrilerde yaygın olarak kullanılmaktadır. Bazı kuruluşlar, kullanıcı ayrıntılarını üçüncü taraf veri merkezlerinde saklar ve gerektiğinde verileri çeker. Bu nedenle, bir müşteriye ait herhangi bir özel verinin diğer kullanıcılar tarafından görülmemesi için güvenlik seviyelerinin korunması zorunludur.
Yukarıda belirtilen güvenlik sorunlarını önlemek için, aşağıda kuruluşlar tarafından kullanılan savunma mekanizmalarından bazıları verilmiştir.
Deterrent Control - Siber saldırıyı azaltmak için potansiyel tehdit olduğunuzu bilin.
Preventive Control - Bulutunuza erişmek için yüksek düzeyde kimlik doğrulama politikasını sürdürün.
Detective Control - Kullanıcılarınızı izleyin ve olası riskleri tespit edin.
Corrective Control - Farklı ekiplerle yakın çalışın ve dedektif kontrolü aşamasında ortaya çıkan sorunları giderin.
Yazılım bileşimi, yazılım ürününüzü oluşturmanın yolu anlamına gelir. Temel olarak, yazılımınızın farklı modüllerinin belirli iş hedefleri için iletişim kuracağı üst düzey yazılım mimarisi diyagramı ile ilgilenir. Bu bölümde, organizasyonlarda yaygın olarak kullanılan farklı yazılım kompozisyon modellerini öğreneceğiz. Mikro hizmette, her işlevi tek bir sürece ayırıyoruz. Bu hizmetlerin her biri bağımsız ve doğası gereği dolu olacaktır.
İşlevsel ayrıştırma, mikro hizmetlerinizi oluşturmada önemli bir rol oynar. Uygulamanıza çeviklik, esneklik ve ölçeklenebilirlik sağlar.
Toplayıcı Modeli
Toplayıcı modeli, bir mikro hizmet geliştirilirken uygulanabilecek en basit web modelidir. Bu kompozisyon modelinde, basit bir web modülü bir yük dengeleyici görevi görecek, bu da gereksinimlere göre farklı hizmetleri arayacağı anlamına geliyor. Aşağıda, toplayıcı tasarımlı basit bir mikro hizmet web uygulamasını gösteren bir diyagram bulunmaktadır. Aşağıdaki görüntüde görüldüğü gibi, "Toplayıcı" farklı hizmetleri tek tek çağırmaktan sorumludur. A, B ve C hizmetlerinin sonuçlarına herhangi bir iş mantığı uygulamamız gerekirse, iş mantığını toplayıcının kendisinde uygulayabiliriz.
Bir toplayıcı, gerektiğinde başkaları tarafından tüketilebilen dış dünyaya başka bir hizmet olarak tekrar maruz kalabilir. Toplayıcı modeli web hizmeti geliştirirken, A, B ve C hizmetlerimizin her birinin kendi önbellek katmanlarına sahip olması ve doğası gereği tam yığın olması gerektiğini unutmamalıyız.
Proxy Kalıbı
Proxy mikro hizmet modeli, toplayıcı modelinin bir varyasyonudur. Bu modelde toplama modülü yerine proxy modülü kullanacağız. Proxy servisi farklı servisleri ayrı ayrı arayabilir.
Proxy modelinde, bir döküm proxy katmanı sağlayarak bir seviye ekstra güvenlik oluşturabiliriz. Bu katman arayüze benzer şekilde davranır.
Zincirli Desen
Adından da anlaşılacağı gibi, bu tür bir kompozisyon modeli zincir yapısını takip edecektir. Burada, müşteri ve hizmet katmanı arasında hiçbir şey kullanmayacağız. Bunun yerine, müşterinin hizmetlerle doğrudan iletişim kurmasına izin vereceğiz ve tüm hizmetler, bir hizmetin çıktısının bir sonraki hizmetin girdisi olacağı şekilde zincirlenecektir. Aşağıdaki resimde tipik bir zincirleme model mikro hizmeti gösterilmektedir.
Bu mimarinin önemli bir dezavantajı, tüm süreç tamamlanana kadar istemcinin engellenmesidir. Bu nedenle, zincirin uzunluğunun olabildiğince kısa tutulması şiddetle tavsiye edilir.
Dal Mikro Hizmet Kalıbı
Dal mikro hizmeti, toplayıcı modelinin ve zincir modelinin genişletilmiş sürümüdür. Bu tasarım modelinde, müşteri hizmetle doğrudan iletişim kurabilir. Ayrıca, bir hizmet aynı anda birden fazla hizmetle iletişim kurabilir. Branch Microservice'in şematik temsili aşağıdadır.
Dal mikro hizmet modeli, geliştiricinin hizmet çağrılarını dinamik olarak yapılandırmasına olanak tanır. Tüm hizmet çağrıları eşzamanlı olarak gerçekleşir, bu da A hizmetinin B ve C hizmetlerini aynı anda arayabileceği anlamına gelir.
Paylaşılan Kaynak Kalıbı
Paylaşılan kaynak modeli, aslında daha önce bahsedilen tüm model türlerinin bir kümesidir. Bu modelde, istemci veya yük dengeleyici, gerektiğinde her hizmetle doğrudan iletişim kuracaktır. Bu, çoğu kuruluşta yaygın olarak izlenen en etkili tasarım modelidir. Aşağıda, Paylaşılan Kaynak tasarım modelinin şematik bir temsilidir.
Bu bölümde, SOA mimarisine sahip CRUD tabanlı bir uygulama geliştireceğiz. Sonraki bölümlerde bu hizmeti mikro hizmete ayıracağız ve SOA ile mikro hizmet mimarisi arasındaki temel farkı öğreneceğiz.
Sistem Yapılandırması ve Kurulumu
Bu bölümde, hizmetimizi her aradığımızda yanıt olarak bir JSON nesnesi döndürecek örnek bir CRUD uygulaması oluşturacağız. Aynı şeyi geliştirmek için Jersey çerçevesini kullanacağız. Aşağıda, yerel sistem ortamınızı kurma adımları verilmiştir.
CRUD Uygulaması Geliştirme
Step 1- NetBeans'i geliştirme IDE'si olarak kullanacağız. Lütfen NetBeans resmi web sitesinde bulunan en son sürümü indirin ve yükleyinhttps://netbeans.org/downloads/.
Step 2- NetBeans IDE'nizi açın. "Dosya -> Yeni Proje" ye gidin. Aşağıdaki ekran görüntüsü açılır. Kategori olarak "Maven" ı seçin ve proje olarak "ArchType'tan Proje" yi seçin ve İleri'ye tıklayın.
Bu, ilk Maven projenizi ve RESTful Web Hizmetinizi oluşturmak için gerekli tüm jar dosyalarını indirecektir.
Step 3- Önceki adımda İleri düğmesine basıldığında aşağıdaki ekran görüntüsü belirir. Burada, Maven Arketipini belirlemeniz gerekecektir.
Arama kutusunda, "Jersey-archType-Webapp (2.16)" araması yapın ve "Daha Eski Göster" onay kutusunu işaretleyin.
Step 4- Aynısını seçtikten sonra, aşağıdaki ekrana yönlendirileceksiniz. Listeden tercih edilen kavanozu seçin ve devam etmek için İleri'ye basın.
Step 5- Bu adımda, projenizin adını ve Grup Kimliğini ve paket ayrıntılarını sağlamanız gerekir. Tüm bu bilgileri sağladıktan sonra devam etmek için Bitir'e basın.
Step 6- Çalışma alanı kurulumunuzu tamamladınız. Proje dizini aşağıdaki gibi görünecektir.
"Bağımlılıklar" klasörünüze bakın ve Maven'in bu proje için gerekli tüm jar dosyalarını otomatik olarak indirdiğini göreceksiniz.
Step 7- Çalışma alanınız ayarlandı ve kodlama ile başlayabilirsiniz. Devam edin ve aşağıdaki ekran görüntüsünde belirtildiği gibi dört sınıf ve paket oluşturun. MyResource.java'nın zaten Maven tarafından yaratıldığını, çünkü Maven kendi web hizmetinizi oluşturacağınızı algılayacak kadar akıllı olduğunu görebilirsiniz.
Step 8 - Yukarıdaki adımı tamamladıktan sonra, UserProfile.java olan POJO sınıfımızı aşağıdaki gibi oluşturacağız.
package com.tutorialspoint.userprofile.Model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class UserProfile {
private long ProId;
private String FName;
private String LName;
private String Add;
public UserProfile(){}
public UserProfile(long Proid, String Fname, String Lname,String Add) {
this.ProId = Proid;
this.FName = Fname;
this.LName = Lname;
this.Add = Add;
}
public long getProId() {
return ProId;
}
public void setProId(long ProId) {
this.ProId = ProId;
}
public String getFName() {
return FName;
}
public void setFName(String FName) {
this.FName = FName;
}
public String getLName() {
return LName;
}
public void setLName(String LName) {
this.LName = LName;
}
public String getAdd() {
return Add;
}
public void setAdd(String Add) {
this.Add = Add;
}
}
Step 9- Şimdi Veritabanı sınıfımızı oluşturacağız. Bu, öğrenme materyalinin bir parçası olduğu için, veri tabanımız olarak herhangi bir DB kullanmayacağız. Geçici belleğimiz olarak çalışmak için dahili bir Java belleği kullanacağız. Aşağıdaki kod setinde görebileceğiniz gibi, veritabanı olarak MAP kullanacağız. Yaptığımız tüm web servis işlemlerini, sınıfta tanımlı olan bu MAP üzerinde çalışacağız.
package com.tutorialspoint.userprofile.DAO;
import com.tutorialspoint.userprofile.Model.UserProfile;
import java.util.HashMap;
import java.util.Map;
public class DatabaseClass {
private static Map<Long,UserProfile> messages = new HashMap<Long,UserProfile>();
public static Map<Long,UserProfile> getUsers() {
return messages;
// Each time this method will return entire map as an instance of database
}
}
Step 10- Şimdi servis sınıfımızı oluşturalım. Devam edin ve aşağıdaki kod kümesini "ProfileService.java" sınıfına kopyalayıp yapıştırın. Dış dünyaya teşhir edilecek tüm web servis yöntemlerimizi ilan edeceğimiz sınıftır. Bu sınıfta geçici veritabanımıza erişilebilmesi için DatabaseClass'ımızın bir referansını oluşturmamız gerekiyor.
package com.tutorialspoint.userprofile.service;
import com.tutorialspoint.userprofile.DAO.DatabaseClass;
import com.tutorialspoint.userprofile.Model.UserProfile;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class ProfileService {
private Map<Long,UserProfile> Userprofiles = DatabaseClass.getUsers();
// Creating some predefine profile and populating the same in the map
public ProfileService() {
UserProfile m1 = new UserProfile(1L,"Tutorials1","Point1","TutorialsPoint.com");
UserProfile m2 = new UserProfile(2L,"Tutorials2","Point2","TutorialsPoint.com2");
UserProfile m3 = new UserProfile(3L,"Tutorials3","Point3","TutorialsPoint.com3");
UserProfile m4 = new UserProfile(4L,"Tutorials4","Point4","TutorialsPoint.com4");
Userprofiles.put(1L, m1);
Userprofiles.put(2L, m2);
Userprofiles.put(1L, m3);
Userprofiles.put(2L, m4);
}
//Method to fetch all profile
public List<UserProfile> getAllProfile() {
List<UserProfile> list = new ArrayList<UserProfile>(Userprofiles.values());
return list;
} // Method to fetch only one profile depending on the ID provided
public UserProfile getProfile(long id) {
return Userprofiles.get(id);
} //Method to add profile
public UserProfile addProfile(UserProfile UserProfile) {
UserProfile.setProId(Userprofiles.size()+1);
Userprofiles.put(UserProfile.getProId(), UserProfile);
return UserProfile;
} //method to update Profile
public UserProfile UpdateProfile(UserProfile UserProfile) {
if(UserProfile.getProId()<=0) {
return null;
} else {
Userprofiles.put(UserProfile.getProId(), UserProfile);
return UserProfile;
}
} //method to delete profile
public void RemoveProfile(long Id) {
Userprofiles.remove(Id);
}
}
Step 11 - Bu adımda, URL ile bağlantılı olacak Kaynak sınıfımızı oluşturacağız ve ilgili servis çağrılacaktır.
package com.tutorialspoint.userprofile.Resource;
import com.tutorialspoint.userprofile.Model.UserProfile;
import com.tutorialspoint.userprofile.service.ProfileService;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/Profile")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public class ProfileResource {
ProfileService messageService = new ProfileService();
@GET
public List<UserProfile> getProfile() {
return messageService.getAllProfile();
}
@GET
@Path("/{ProID}")
public UserProfile getProfile(@PathParam("ProID")long Id) {
return messageService.getProfile(Id);
}
@POST
public UserProfile addProfile(UserProfile profile) {
return messageService.addProfile(profile);
}
@PUT
@Path("/{proID}")
public UserProfile UpdateProfile(@PathParam("proID")long Id,UserProfile UserProfile) {
UserProfile.setProId(Id);
return messageService.UpdateProfile(UserProfile);
}
@DELETE
@Path("/{ProID}")
public void deleteProfile(@PathParam("ProID")long Id) {
messageService.RemoveProfile(Id);
}
}
Step 12- Projeyi temizleyin ve çalıştırın. Her şey yolunda giderse, erişim sırasında tarayıcıda aşağıdaki çıktıyı almalısınızhttp://localhost:8080/UserProfile/webapi/Profile” URL.
XML gösterimi kullanılarak farklı girişlerin doldurulduğunu görebilirsiniz.
Postman kullanılarak uygun yöntem URL'si uygulanarak farklı yöntem test edilebilir.
@GET method - Aşağıdaki ekran görüntüsü, tüm kullanıcı ayrıntılarını döndüren alma isteği için istenen sonucu nasıl elde edebileceğimizi gösterir.
@POST- Aşağıdaki istek, Post yöntemimizi test etmek için kullanılabilir. ProId'nin nasıl otomatik olarak oluşturulduğuna dikkat edin.
@PUT- Bu yöntem girişleri güncelleyecektir. Aşağıdaki ekran görüntüsü, Jersey'nin proId'yi istek URL'sinden nasıl aldığını ve aynı kullanıcı profili yanıtını nasıl güncellediğini göstermektedir.
Aynı şekilde, web hizmetlerinizde bulunan diğer yöntemleri de kontrol edebilirsiniz.
Önceki bölümde, CRUD işlevselliğini ortaya çıkaracak bir hizmet geliştirdik. Şimdi ne zaman bu hizmeti uygulamamızda uygulamaya çalışsak, bu uygulamanın bir istemcisini oluşturmalı ve bunu uygulamamıza eklemeliyiz. Bu bölümde, Mikro Hizmet konseptini kullanarak bu işlevselliği nasıl oluşturacağımızı öğreneceğiz. Aşağıda, yukarıdaki adımlar kullanılarak oluşturulan uygulamamızın şematik bir gösterimi yer almaktadır.
Oyuncu, hizmetimizin giriş noktası olmalıdır. Bu durumda “ProfileResource.java” bir aktörün sorumluluğunu yerine getirir. Bu sınıf, ekleme, güncelleme ve silme gibi farklı işlemleri gerçekleştirmek için farklı yöntemler çağıracaktır.
CRUD Uygulamasının Ayrıştırılması
Mikro hizmetin ana ilkesine göre, modüllerin her biri için yalnızca bir iş görevine ihtiyacımız var, bu nedenle bir aktör dört CRUD işlevinin tamamından sorumlu olmamalıdır. Microservice'in SOA'nın mimari bir temsili olduğunu kavramsal olarak size açıklayacak bazı yeni roller sunduğumuz aşağıdaki örneği düşünün.
"Ana kullanıcı", kişinin ihtiyaçlarını karşılamak için "Uygulama Kontrolörü" ile iletişim kuran kullanıcıdır. "Uygulama Denetleyicisi", son kullanıcının isteğine bağlı olarak farklı "Kaynak Yöneticileri" ni çağıran kişidir. "Kaynak Yöneticisi" yapılması gereken işi yapar. Uygulamanın farklı birimlerinin farklı rollerine hızlıca bir göz atalım.
End User/Main Users - Uygulama Denetleyicisine bazı kaynaklar için talepler.
Application - Talebi alır ve aynısını belirli Kaynak Yöneticisine iletir.
Resource Manager - Güncelleştirme, silme ve kullanıcı ekleme işini yapar.
Bir sınıfın toplam sorumluluğunun diğer sınıflar arasında nasıl dağıtıldığını görün.
Bu bölümde, mevcut farklı hizmetleri tüketecek bir mikro hizmet uygulaması oluşturacağız. Oluşturduğumuz her hizmet doğası gereği tam yığın olacağından mikro hizmetin bir uygulama oluşturmanın uygun maliyetli bir yolu olmadığını hepimiz biliyoruz. Yerel ortamda bir mikro hizmet oluşturmak, bir anda kullanılabilecek şekilde çalışmaya devam etmek için bir sunucunun dört örneğine sahip olmanız gerektiğinden, üst düzey sistem yapılandırması gerektirir. İlk mikro hizmetimizi oluşturmak için, mevcut SOA uç noktalarından bazılarını kullanacağız ve aynısını uygulamamızda da kullanacağız.
Sistem Yapılandırması ve Kurulumu
Oluşturma aşamasına geçmeden önce, sisteminizi buna göre hazırlayın. Bazı genel web hizmetlerine ihtiyacınız olacaktır. Bunun için kolayca google'a gidebilirsiniz. SOAP web hizmetini kullanmak istiyorsanız, bir WSDL dosyası alacaksınız ve oradan belirli web hizmetini kullanmanız gerekir. REST hizmeti için, aynısını tüketmek için yalnızca bir bağlantıya ihtiyacınız olacaktır. Bu örnekte, tek bir uygulamada üç farklı web hizmetini "SABUN", "REST" ve "özel" olarak sıkıştıracaksınız.
Uygulama Mimarisi
Mikro hizmet uygulama planını kullanarak bir Java uygulaması oluşturacaksınız. Özel bir hizmet oluşturacaksınız ve bu hizmetin çıktısı diğer hizmetler için bir girdi olarak çalışacaktır.
Aşağıda, bir mikro hizmet uygulaması geliştirmek için izlenecek adımlar verilmiştir.
Step 1: Client creation for SOAP service- Bir web servisini öğrenmek için birçok ücretsiz web API'si vardır. Bu eğiticinin amacı için "GeoIP" hizmetini kullanın.http://www.webservicex.net/.”WSDL dosyası, webservicex.net web sitesinde bulunan aşağıdaki bağlantıda sağlanmaktadır . İstemciyi bu WSDL dosyasından oluşturmak için tek yapmanız gereken terminalinizde aşağıdaki komutu çalıştırmaktır.
wsimport http://www.webservicex.net/geoipservice.asmx?WSDL
Bu komut, tüm gerekli istemci dosyalarını, hizmet uç noktası arabiriminden sonra adlandırılan "SEI" adlı bir klasör altında oluşturacaktır.
Step 2: Create your custom web service- Bu eğiticide daha önceki bir aşamada bahsedilen aynı süreci izleyin ve "CustomRest" adlı Maven tabanlı bir REST api oluşturun. Tamamlandığında, "MyResource.java" adlı bir sınıf bulacaksınız. Devam edin ve aşağıdaki kodu kullanarak bu sınıfı güncelleyin.
package com.tutorialspoint.customrest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("myresource")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "IND|INDIA|27.7.65.215";
}
}
Her şey tamamlandığında devam edin ve bu uygulamayı sunucuda çalıştırın. Tarayıcıda aşağıdaki çıktıyı almalısınız.
Bu, çağrıldığında bir dize nesnesi döndüren web sunucusudur. Bu, kayıt oluşturmak için diğer uygulamalar tarafından kullanılabilecek girdiler sağlayan girdi hizmetidir.
Step 3: Configure another Rest API- Bu adımda, services.groupkt.com adresinde bulunan başka bir web servisini kullanın . Bu, çağrıldığında bir JSON nesnesi döndürür.
Step 4: Create JAVA application - “Yeni Proje” -> “JAVA projesi” ni seçerek normal bir Java uygulaması oluşturun ve aşağıdaki ekran görüntüsünde gösterildiği gibi Bitir'e basın.
Step 5: Add the SOAP client- 1. adımda, SOAP web hizmeti için istemci dosyasını oluşturdunuz. Devam edin ve bu müşteri dosyalarını mevcut projenize ekleyin. İstemci dosyalarının başarıyla eklenmesinden sonra, uygulama dizininiz aşağıdaki gibi görünecektir.
Step 6: Create your main app- Bu üç web hizmetinin tamamını kullanacağınız ana sınıfınızı oluşturun. Kaynak projeye sağ tıklayın ve “MicroServiceInAction.java” adlı yeni bir sınıf oluşturun. Sonraki görev, bundan farklı web servislerini aramaktır.
Step 7: Call your custom web service - Bunun için devam edin ve kendi servisinizi çağırmayı uygulamak için aşağıdaki kod setini ekleyin.
try {
url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
inputToOtherService = output;
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Step 8: Consume SOAP Services- İstemci dosyanızı oluşturdunuz ancak bu paketin tamamında hangi yöntemin çağrılması gerektiğini bilmiyor musunuz? Bunun için, istemci dosyalarınızı oluşturmak için kullandığınız WSDL'ye tekrar başvurmanız gerekir. Her WSDL dosyasında bu etiket için bir "wsdl: service" etiket araması bulunmalıdır. Bu web hizmetine giriş noktanız olmalıdır. Bu uygulamanın hizmet uç noktası aşağıda verilmiştir.
Şimdi bu hizmeti uygulamanızda uygulamanız gerekiyor. SOAP web hizmetinizi uygulamak için ihtiyacınız olan Java kodu seti aşağıdadır.
GeoIPService newGeoIPService = new GeoIPService();
GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);
// Ipaddress is output of our own web service.
System.out.println("Country Name from SOAP Webserivce ---"+newGeoIP.getCountryName());
Step 9: Consume REST web service- Şimdiye kadar hizmetlerden ikisi tüketildi. Bu adımda, özelleştirilmiş URL'ye sahip başka bir REST web hizmeti, özel web hizmetinizin yardımıyla kullanılacaktır. Bunu yapmak için aşağıdaki kod setini kullanın.
String url1="http://services.groupkt.com/country/get/iso3code/";//customizing the Url
url1 = url1.concat(countryCode);
try {
URL url = new URL(url1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Step 10: Consume all services - "CustomRest" web hizmetinizin çalıştığını ve İnternet'e bağlı olduğunuzu göz önünde bulundurarak, her şey başarıyla tamamlanırsa, aşağıdaki konsolide ana sınıfınız olmalıdır.
package microserviceinaction;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;
import net.webservicex.GeoIP;
import net.webservicex.GeoIPService;
import net.webservicex.GeoIPServiceSoap;
public class MicroServiceInAction {
static URL url;
static HttpURLConnection conn;
static String output;
static String inputToOtherService;
static String countryCode;
static String ipAddress;
static String CountryName;
public static void main(String[] args) {
//consuming of your own web service
try {
url = new URL("http://localhost:8080/CustomRest/webapi/myresource");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
inputToOtherService = output;
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//Fetching IP address from the String and other information
StringTokenizer st = new StringTokenizer(inputToOtherService);
countryCode = st.nextToken("|");
CountryName = st.nextToken("|");
ipAddress = st.nextToken("|");
// Call to SOAP web service with output of your web service---
// getting the location of our given IP address
String Ipaddress = ipAddress;
GeoIPService newGeoIPService = new GeoIPService();
GeoIPServiceSoap newGeoIPServiceSoap = newGeoIPService.getGeoIPServiceSoap();
GeoIP newGeoIP = newGeoIPServiceSoap.getGeoIP(Ipaddress);
System.out.println("Country Name from SOAP Webservice ---"+newGeoIP.getCountryName());
// Call to REST API --to get all the details of our country
String url1 = "http://services.groupkt.com/country/get/iso3code/"; //customizing the Url
url1 = url1.concat(countryCode);
try {
URL url = new URL(url1);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Bu dosyayı çalıştırdıktan sonra, konsolda aşağıdaki çıktıyı göreceksiniz. İlk mikro hizmet uygulamanızı başarıyla geliştirdiniz.