Quarkus, 2019’da Red Hat tarafından başlatılan tam yığın, açık kaynaklı bir Java çerçevesidir. Quarkus, Spring’e bir alternatiftir (her ne kadar Spring ile entegre olabilse de), bazı ilginç özellikleri ile.

Quarkus, sıfırdan “bulutta yerel” olacak şekilde tasarlanmıştır, yani Kubernetes, sunucusuz platformlar ve Apache Kafka (akış işleme için) ve JAX-RS (RESTful web hizmetleri için) gibi çeşitli kitaplıklar için ayarlanmıştır. Quarkus ayrıca tam bir CDI (bağlam ve bağımlılık enjeksiyonu) motoruna ve Reaktif programlama desteğine sahiptir.

Quarkus’a uygulamalı bir giriş için okumaya devam edin.

Quarkus CLI’yi kurun

Quarkus, inşa aracı sarmalayıcıları olarak Maven ve Gradle’ı destekler, ancak aynı zamanda bir komut satırı arabirimi (CLI) aracıyla birlikte gelir. JBang aracı aracılığıyla CLI’yi kurarak başlayacağız. Komut satırından Liste 1’deki kodu çalıştırın.

Liste 1. Quarkus CLI’yi Yükleme

// Linux and iOS: 
curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio

// PowerShell:
iex "& { $(iwr https://ps.jbang.dev) } app install --fresh --force quarkus@quarkusio"

Komut tamamlandığında, yazarak quarkus -version bir sonuç döndürmelidir.

Quarkus uygulaması oluşturun

Yazarak yeni bir uygulama oluşturun quarkus create app com.infoworld:my-quarkus:1.0, nerede com.infoworld grup kimliğidir, my-quarkus yapı kimliğidir ve 1.0 sürüm numarasıdır.

Komut satırı aracı, bir şeyleri yapılandırmak için kullanabileceğiniz birçok seçeneğe sahiptir. Yazarak bu seçeneklere göz atabilirsiniz. quarkus --help. Yazarak belirli bir komutla ilgili yardım alabilirsiniz. quarkus create app --help. Hangi derleme aracı sarmalayıcısının kullanılacağı gibi şeyleri tanımlayabileceğinize dikkat edin.

Quarkus uygulamasını çalıştırma

Şimdi yeni my-quarkus dizinine gidin ve şunu yazın quarkus dev. Quarkus dev modu düzgün bir yaklaşımı temsil eder. Sıcak kod yüklemeyi destekler ve konteynerinizi durdurmadan testleri istediğiniz zaman çalıştırmanıza izin verir. Bu nedenle, geliştirici konteyneri komut istemiyle çalışmaya başladıktan sonra size bazı komut seçenekleri verilir:

Tests paused Press [r] to resume testing, [o] Toggle test output, [h] for more options>

Bu, testler eklemek de dahil olmak üzere kod değişiklikleri yapabileceğiniz ve ardından testleri r. Ayrıca, kayıt düzeylerini şu şekilde değiştirebilirsiniz: h veya kabı şununla durdur q.

Uzak bir makinede Quarkus dev modunu çalıştırma

Varsayılan olarak, Quarkus dev modu yalnızca localhost’ta dinler. Tüm ağlarda dinlemek istiyorsanız, ana bilgisayar parametresini ekleyebilirsiniz:

quarkus dev -Dquarkus.http.host=0.0.0.0

Uygulamayı üretim için oluşturmak için quarkus build emretmek.

Uygulama geliştirme modunda çalışırken localhost:8080’i ziyaret edin ve Şekil 1’e benzer karşılama ekranını göreceksiniz.

Şekil 1. Quarkus karşılaması

kuarkus hoşgeldin IDG

Quarkus proje düzenini keşfetme

Yeni uygulama dizininin içinde, testler için test ve uygulama dosyaları için ana ile tipik Maven düzenini izleyen src dizini bulunur. /src/main içinde üç dizin vardır: /src/main/resources, statik dosyalarınızın bulunduğu yer (src/main/resources/META-INF/resources/index.html gibi sayfalarınızı yönlendiren HTML sayfaları dahil); /src/main/java, arka uç kodunuzun ve ara yazılım kodunuzun bulunduğu yer; ve /src/main/docker, burada Quarkus’un sizin için varsayılan Docker dosyalarını oluşturduğu (JVM olmadan çalıştırmak için Dockerfile.native dahil).

Uygulamada yaptığınız tüm değişiklikler, tarayıcı yenilendiğinde yansıtılacaktır. Örneğin, src/main/java/com/infoworld/GreetingResource.java dosyasını açabilir ve bir JAX-RS uç noktası görebilirsiniz. İletiyi değiştirir ve localhost:8080/hello’yu yeniden yüklerseniz, değişikliklerinizin yansıtıldığını görürsünüz.

Liste 2. /hello REST bitiş noktası

package com.infoworld;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Welcome to the machine";
    }
}

kuarkus uzantıları

Quarkus, bir komutla eklenebilen uzantılar aracılığıyla sağlanan birçok yeteneğe sahiptir. Quarkus’un neyi desteklediğini anlamak için, Quarkus’u JPA, Kafka, MongoDB, Amazon S3 ve Knative ile kullanmak için birkaç düzine örnek içeren bu Git deposuna bakın. Bu örnekler, bu teknolojilerle bir Quarkus uygulaması geliştirirken başlangıç ​​noktaları olarak kullanmak için de iyidir (dolayısıyla adı hızlı başlar).

Çalıştırarak uygulamanızda hangi uzantıların yüklü olduğunu görebilirsiniz. quarkus ext ls. Şu anda sadece quarkus-resteasy’nin kurulu olduğunu göreceksiniz. Kullanılabilir kurulabilir modüllerin bir listesini şu şekilde alabilirsiniz: quarkus ext ls -i.

İle kurulum yapılır. quarkus ext add emretmek.

Quarkus CDI bağımlılık enjeksiyonu

Quarkus, ArC adı verilen özel yapım bir bağımlılık enjeksiyon motoruyla birlikte gelir. ArC, CDI spesifikasyonunun kısmi bir uygulamasıdır ve ayrıca kendi özel özelliklerine sahiptir. Genel olarak, ArC sistemi, CDI’dan daha basit ve anlaşılması daha kolaydır.

RESTful kaynağı tarafından kullanılmak üzere bir hizmet sınıfının nasıl ekleneceğini görelim. /src/main/java/com/infoworld/service/MyService.java adresinde yeni bir dosya oluşturarak başlayın. Liste 3’te görülen kodu ekleyin.

Liste 3. MyService sınıfı

package com.infoworld.service;

import javax.enterprise.context.ApplicationScoped;
import java.util.Random;

@ApplicationScoped
public class MyService {
    public Integer getRandom(){
      Random random = new Random();
      return random.nextInt(100);
    }
}

MyService, tek bir yöntemle çok basit bir sınıftır, getRandom(), rastgele bir tamsayı döndürür. CDI standart notuyla açıklamalıdır, @ApplicationScoped, bu onu DI sistemi için kullanılabilir hale getirir. (Burada CDI kapsamları ve bağlamları hakkında daha fazla bilgi edinin.) RESTEasy uzantısı tarafından kullanıldığı için Quarkus CDI’nin projenize dahil edildiğini unutmayın.

Şimdi /src/main/Java/com/infoworld/GreetingResource.java sınıfını açın ve onu Liste 4’te görüldüğü gibi değiştirin.

Liste 4. MyService’i Kullanan Tebrik Kaynağı

package com.infoworld;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import javax.inject.Inject;
import com.infoworld.service.MyService;

@Path("/hello")
public class GreetingResource {
    @Inject
    MyService myService;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Welcome to the machine.  Your number is: " + myService.getRandom();
    }
}

Buradaki anahtar unsur, @Inject CDI motorunun aşağıdakileri yerine getirmesine neden olan açıklama myService Liste 4’te oluşturduğumuz kaynak çekirdeği ile referans. Bu daha sonra /hello yolu için rasgele sayı üretmek için kullanılır.

TebrikKaynak testini düzeltin

Şimdi Quarkus dev’in çalıştığı komut satırına dönerseniz ve şunu yazarsanız r testleri yeniden çalıştırmak için, RESTEasy uç noktası için test senaryosunun başarısız olduğunu göreceksiniz. Bunu düzeltelim. test/java/com/infoworld/GreetingResourceTest.java dosyasını açın. Bu sınıfın Quarkus tarafından zaten yararlı bir şekilde sağlanan birkaç farklı test kitaplığı kullandığına dikkat edin. RestAssured RESTful uç noktalarının kolay test edilmesini sağlayan kitaplık.

değiştir GreetingResourceTest Liste 5’te görüldüğü gibi.

Liste 5. Güncellenmiş TebrikKaynak Testi

package com.infoworld;

import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.containsString;  // changed

@QuarkusTest
public class GreetingResourceTest {

    @Test
    public void testHelloEndpoint() {
        given()
          .when().get("/hello")
          .then()
             .statusCode(200)
             .body(containsString("machine"));  // changed
    }
}

Yorumlarda belirtildiği gibi, sadece iki satır değiştirilir. Yanıt gövdesinde “makine” kelimesinin varlığını kontrol etmeniz yeterlidir. Şimdi testleri şununla çalıştırırsanız r buyur, geçecekler.

REST istemci uzantılarını ekleyin

Biraz daha derine inelim ve hizmet sınıfındaki harici bir REST API’sine (Star Wars API, diğer adıyla SWAPI) bir çağrı yapalım. Çalıştırarak quarkus-rest-api istemcisini ekleyerek başlayın quarkus ext add quarkus-rest-client. Bunu uygulama çalışırken başka bir pencerede yapabileceğinizi ve Quarkus’un uzantıyı uygulayacağını unutmayın. Çok etkileyici.

Verileri modellemeyi basitleştirmek için rest-client-jackson uzantısından da yararlanacağız. Tip quarkus ext add rest-client-jackson.

Model sınıfı

Yeni bir dizinde bir model sınıfı oluşturun: src/main/java/com/infoworld/client/Person.java. Bu, Liste 6’da görüldüğü gibi, Jackson’ın bizim için dolduracağı çok basit bir veri aktarım nesnesi olacaktır.

Liste 6. Kişi modeli sınıfı

package com.infoworld.client;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Person {
    public String name;
}

Dikkat edin @JsonIgnoreProperties bu nedenle, kaynak JSON’da model nesnesinde bulunmayan alanlar olduğunda hiçbir hata atılmaz.

Aynı dizinde, SWAPI bitiş noktasına ulaşacak yeni bir hizmet sınıfı oluşturun: /src/main/Java/com/infoworld/client/SwapiClient.java. Liste 7’de bu dosyanın içeriğine bakın.

Listeleme 7. SwapiClient.java

package com.infoworld.client;

import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;
import org.jboss.resteasy.annotations.jaxrs.QueryParam;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import java.util.Set;

@RegisterRestClient
public interface SwapiClient {
    @GET
    @Path("/people/{id}")
    @Produces("application/json")
    Person getById(@PathParam Integer id);
}

Arayüzün bir dinlenme istemcisi olarak kaydedildiğine dikkat edin. @RegisterRestClient Dipnot. yöntem getById ayrıca şu şekilde bulunan bir GET HTTP Yöntemine isabet ettiğini tanımlamak için açıklanmıştır. "/people/{id}", nerede id aranarak sağlanacaktır. getById(@PathParam Integer id) yöntem. Burada, dinlendirici bir son noktayı, dinlendirici bir istemciyi tanımlayan aynı ek açıklamalarla tanımlıyoruz.

Ancak, son noktanın kökü nerede tanımlanır? aç src/main/resources/application.properties ve Liste 8’de görülen iki satırı ekleyin.

Liste 8. application.properties’de REST istemci özelliklerini tanımlama

com.infoworld.client.SwapiClient/mp-rest/url=https://swapi.dev/api
com.infoworld.client.SwapiClient/mp-rest/scope=javax.inject.Singleton

Bu özellikler ve uygulamaya nasıl bağlandıkları hakkında daha fazla bilgiyi burada bulabilirsiniz.

Şimdi, yeni istemci hizmetini kullanmak için TebrikKaynaklarını Liste 9’da olduğu gibi güncelleyin.

Listeleme 9. REST istemcisini kullanarak SelamlamaKaynağı

package com.infoworld;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import javax.inject.Inject;
import com.infoworld.service.MyService;
import com.infoworld.client.SwapiClient;

import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.jboss.resteasy.annotations.jaxrs.PathParam;

@Path("/hello")
public class GreetingResource {
@Inject
MyService myService;

@Inject
@RestClient
SwapiClient swapiClient;

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello, your Star Wars character is: " + swapiClient.getById(myService.getRandom()).name;
}
}

Şimdi kalan istemciyi içine enjekte ediyoruz. swapiClient değişken ve çağırma getById Daha önce oluşturduğunuz rasgele sayı hizmetinden rasgele bir kimliğe sahip yöntem. Şimdi localhost:8080/hello’dan şöyle bir yanıt alacaksınız:

Hello, your Star Wars character is: Ric Olié

Bulutta yerel Java

Bu, Quarkus’un gücünün bir kısmının kasırga turuydu, ancak sadece başlangıçtı. Quarkus, Spring’e kesinlikle geçerli bir alternatiftir ve sıklıkla eklenen yeni ve kullanışlı özelliklerle aktif gelişim görmeye devam etmektedir. Bir daha Java çerçevesine ulaştığınızda Quarkus’u düşünün.

Bu eğitim için tüm kod burada mevcuttur.

Telif Hakkı © 2021 IDG Communications, Inc.



#Quarkus #Kubernetese #özgü #Javayı #kullanmaya #başlayın