Spring çerçevesi uzun süredir arka uç Java geliştirmesine egemen oldu, ancak birkaç yeni çerçeve bu statükoya meydan okuyor. mikronot en zorlayıcılar arasındadır. Grails’i oluşturan ekip tarafından geliştirilen Micronaut, modern mimariler için yapılmıştır.
Bu makale Micronaut’a uygulamalı bir giriş niteliğindedir. Basit bir RESTful API tabanlı uygulama ile başlayacağız, onu reaktif engellemesiz IO (reaktif NIO) için yeniden düzenleyeceğiz, ardından Micronaut’un mikro hizmetlerde ve sunucusuz mimarilerde bulutta yerel geliştirme desteğine hızlıca göz atacağız.
Micronaut’u özel yapan nedir?
Micronaut, Spring ve Grails gibi eski çerçevelerden derlenen bir dizi fayda sağlar. “Yerel olarak bulutta yerel” olarak faturalandırılır, yani sıfırdan bulut ortamları için oluşturulmuştur. Bulutta yerel yetenekleri arasında ortam algılama, hizmet keşfi ve dağıtılmış izleme bulunur.
Micronaut ayrıca, daha hızlı başlatma için önceden (AoT) derleme kullanan yeni bir kontrol ters çevirme (IoC) kabı sunar. AoT derlemesi, başlatma süresinin kod tabanının boyutuyla artmadığı anlamına gelir. Bu, özellikle düğümlerin genellikle talebe yanıt olarak kapatıldığı ve yeniden başlatıldığı sunucusuz ve kapsayıcı tabanlı dağıtımlar için çok önemlidir.
Micronaut, şu anda Scala desteği ile Java, Groovy ve Kotlin’i destekleyen çok dilli bir JVM çerçevesidir.
Son olarak, Micronaut reaktif programlamayı destekler. Geliştiriciler her ikisini de kullanabilir reaktifX veya Reaktör çerçeve içinde. itibariyle Mikronot 3Temmuz 2021’de piyasaya sürülen Reactor, önerilen yaklaşımdır. (Yeni sürümlerde geçişli bağımlılıklar olarak hiçbir Reaktif kitaplığın dahil edilmediğini unutmayın.)
Micronaut’u kullanmaya başlayın
Micronaut, Linux ve macOS dahil olmak üzere herhangi bir Unix tabanlı sisteme kurulumu kolaydır. SDKMan. Windows kullanıyorsanız, indirin Mikronot İkili ve yolunuza ekleyin.
Kurulum tamamlandığında, şunları bulacaksınız: mn
komut satırınızda bulunan araç.
Bir kabuk açın ve uygun bir yer bulun. Tip mn create-app micronaut-idg --build maven
. Micronaut, sarmalayıcılar aracılığıyla Gradle ve Maven’i destekler, bu nedenle derleme aracının kendisini yüklemeniz gerekmez. Maven’i tercih ederim. Gradle’ı seviyorsanız, bırakın --build maven
önceki komutta bayrak.
Eğer sunucuyu çalıştırırsanız mvnw mn:run
sonra vurabilirsin tarayıcınızda ve size varsayılan bir “bulunamadı” JSON yanıtı verecektir.
Örnek projenin düzenini keşfederseniz, bu standart bir Maven projesidir. main
sınıfta src/main/java/micronaut/idg/Application.java
. Şuna dikkat edin: main
sınıf gömülü bir sunucu çalıştırır. Kod değişiklikleri yaptığınızda, Micronaut geliştirme sunucusu çalışan uygulamayı otomatik olarak günceller.
Bir Mikronot denetleyicisi ekleyin
Spring MVC’de olduğu gibi, URL’leri kod işleyicilere eşlemek için denetleyici sınıfları ekleyebilirsiniz. adresinde bir sınıf ekle src/main/java/micronaut/idg/controller/SimpleController
. Liste 1’de gösterildiği gibi bir metin yanıtı oluşturmak için bu denetleyiciyi kullanalım.
Liste 1. Bir Micronaut denetleyicisi kullanma
package micronaut.idg.controller;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
@Controller("/simple")
public class SimpleController {
@Get(produces = MediaType.TEXT_PLAIN)
public String index() {
return "A Simple Endpoint";
}
}
Artık, Liste 2’de gösterildiği gibi JSON biçimli bir yanıt döndürmenin ne kadar kolay olduğunu görebilirsiniz.
Liste 2. JSON biçimli yanıt
package micronaut.idg.controller;
import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import java.util.Map;
import java.util.HashMap;
@Controller("/simple")
public class SimpleController {
@Get(produces = MediaType.APPLICATION_JSON)
public Map index() {
Map msg = new HashMap();
msg.put("message", "A simple message");
return msg;
}
}
Liste 2, Micronaut’un produces
argüman @Get
dipnot. Bu durumda, belirlediğimiz JSON biçimli yanıtı yayınlar.
Bir Micronaut hizmet katmanı ekleyin
Micronaut’un IoC uygulaması, önceden çalıştığı için başlık altında benzersizdir, ancak yine de CDI (Bağlamlar ve Bağımlılık Enjeksiyonu) belirtiminin eksiksiz bir uygulamasıdır. Bu, muhtemelen Spring’den bildiğiniz tüm tanıdık DI ek açıklamalarını kullanabileceğiniz anlamına gelir (örneğin @Inject
).
Liste 3’te, bir mesaj sağlamak için bir hizmet katmanı çekirdeğini bağlayacağız. Gerçek bir uygulamada, bu sınıf, bir veri erişim çekirdeği aracılığıyla bir veri deposuna veya başka bir uzak API’ye çağrı yapabilir.
Oluşturmak src/main/java/micronaut/idg/service
klasörünü açın ve Liste 3’te görülen iki dosyayı ekleyin—bir arayüz (Simple
) ve uygulanması (SimpleService
).
Liste 3. Basit bir hizmet katmanı çekirdeği oluşturun
// Simple.java
package micronaut.idg.service;
public interface Simple {
public String getMessage();
}
// SimpleService.java
package micronaut.idg.service;
import jakarta.inject.Singleton;
@Singleton
public class SimpleService implements Simple {
public String getMessage(){
return "A simple service message";
}
}
Artık yeni hizmet katmanınızı, hizmeti sunucuya enjekte ederek kullanabilirsiniz. SimpleController
Liste 1’de oluşturduğunuz Liste 4, Constructor
enjeksiyon.
Liste 4. Servis çekirdeğini kontrolöre enjekte edin
@Controller("/simple")
public class SimpleController {
@Inject
private final Simple simpleService;
public SimpleController(@Named("simpleService") Simple simple) { // (1)
this.simpleService = simple;
}
@Get(produces = MediaType.APPLICATION_JSON)
public Map index() {
Map msg = new HashMap();
msg.put("message", simpleService.getMessage());
return msg;
}
}
Kritik çalışma, servis çekirdeğinin ada göre kablolandığı “(1)” olarak yorumlanan satırda yapılır. Şimdi, eğer ziyaret edersen basithizmet katmanından gelen yanıtı göreceksiniz: {"message":"A simple service message"}
.
Mikronotlu Reaktif NIO
Ardından, Micronaut’u Reactor ile kullanmayı keşfedelim. Bu durumda, Reactor ve engelleyici olmayan IO’yu kullanmak için mevcut uygulamamızı yeniden gözden geçireceğiz. Uygulama aynı görevi yerine getirecek, ancak kaputun altında engelleyici olmayan bir yığın (Reactor ve Netty) kullanacak.
Daha önce bahsettiğim gibi, Micronaut 3 varsayılan olarak reaktif bir kitaplık içermez, bu nedenle Liste 5’te gösterildiği gibi Reactor çekirdeğini Maven POM’unuza ekleyerek başlayın.
Liste 5. pom.xml dosyasına Reactor ekleyin
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.4.11</version>
</dependency>
Şimdi geri dönebilirsiniz SimpleController
ve Liste 6’da gösterildiği gibi değiştirin.
Listeleme 6. Denetleyiciyi engellemeyen hale getirin
import reactor.core.publisher.Mono;
//...
@Get
public Mono<map> index() {
Map msg = new HashMap();
msg.put("message", simpleService.getMessage());
return Mono.just(msg);
}
}
Gördüğünüz gibi, sadece aynı dönüş türünü kaydırıyoruz (bir string/string
) Reaktör ile Mono
sınıf.
Uzak hizmetleri reaktif bir şekilde tüketmek için benzer bir destek mevcuttur, böylece bir uygulamayı tamamen engellenmeyen IO üzerinde çalıştırabilirsiniz.
Yeni bileşenler oluşturmak için Micronaut’un CLI’sini kullanma
Bileşenleri saplamak için Micronaut’un komut satırı aracını kullanabilirsiniz. Örneğin, yeni bir denetleyici eklemek isterseniz, şu komutu kullanabilirsiniz: mn add-controller MyController
. Bu, Liste 7’de gösterildiği gibi yeni bir kontrolör ve bunun için testler verir.
Liste 7. Micronaut komut satırıyla yeni bir denetleyici oluşturun
mn create-controller MyController
| Rendered controller to src/main/java/micronaut/idg/MyControllerController.java
| Rendered test to src/test/java/micronaut/idg/MyControllerControllerTest.java
Micronaut ile bulutta yerel geliştirme
Daha önce Micronaut’un bulutta yerel mikro hizmetler ve sunucusuz geliştirme için sıfırdan kurulduğundan bahsetmiştim. Micronaut’un desteklediği bulutta yerel bir kavram, federasyon. Federasyon fikri, birkaç küçük uygulamanın aynı ayarları paylaşması ve birlikte dağıtılabilmesidir. Bu bir mikro hizmet mimarisine çok benziyorsa, haklısınız. Amaç, mikro hizmet geliştirmeyi daha basit hale getirmek ve yönetilebilir kılmaktır. hakkında daha fazla bilgi için Micronaut’un belgelerine bakın. birleşik hizmetler.
Micronaut, dağıtım için bulut ortamlarını hedeflemeyi de kolaylaştırır. Örnek olarak, Liste 8’de gösterildiği gibi Google Cloud Platform’un Docker kayıt defterini hedefleyebilirsiniz.
Liste 8. GCP’nin Docker kayıt defterini kullanarak bir Micronaut uygulaması dağıtın
./mvnw deploy \
-Dpackaging=docker \
-Djib.to.image=gcr.io/my-org/my-project:latest
Bu durumda proje, bir Docker görüntüsü olarak GCP Docker kayıt defterine aktarılır. kullandığımızı unutmayın. Jib Maven eklentisigerçek bir Docker dosyası oluşturmanıza gerek kalmadan bir Java projesini bir Docker görüntüsüne dönüştürür.
Ayrıca Docker’ı paketleme aracı olarak belirlediğimize dikkat edin. -Dpackaging=docker
. Paketleme tamamlandıktan sonra, projenizi Liste 9’da gösterildiği gibi GCP komut satırı aracıyla dağıtabilirsiniz.
Liste 9. Docker görüntüsünü komut satırından çalıştırın
gcloud run deploy \
--image=gcr.io/my-org/my-project:latest \
--platform managed \
--allow-unauthenticated
İzleme, Micronaut’un desteklediği başka bir bulutta yerel özelliktir. Örneğin, Micronaut, etkinleştirmeyi oldukça basit hale getirir. Jaeger dağıtılmış izleme ek açıklamalar yoluyla.
Liste 10, Jaeger’ı bir mikro hizmet uygulamasındaki tüm istekleri izleyecek şekilde yapılandırır. application.xml
dosya.
Liste 10. application.xml’de Jaeger yapılandırması
tracing:
jaeger:
enabled: true
sampler:
probability: 1
Çözüm
Micronaut, bulutta yerel ve mikro hizmet geliştirme için harika olan bir dizi özellik sunar. Aynı zamanda, çerçeve daha geleneksel API tabanlı geliştirmeyi basit ve basit hale getirir. Ve reaktif NIO için Reactor ve Netty ile iyi bir şekilde bütünleşir.
Micronaut, Quarkus, Dropwizard ve diğer bulutta yerel Java çerçevelerinin yanında yer alır. Mevcut çözümlere ferahlatıcı bir alternatiftir.
Telif Hakkı © 2022 IDG Communications, Inc.
Kaynak : https://www.infoworld.com/article/3658968/intro-to-micronaut-a-cloud-native-java-framework.html#tk.rss_all