Halo sadayana, ieu tulisan katilu dina séri Quarkus!
Nalika ngembangkeun microservices Java, mindeng dipercaya yén
Dina leuwih jéntré saeutik, urang mimiti kasampak di wengkuan jeung detil kumaha Quarkus ngarojong Spring API pikeun mintonkeun Spring pamekar kumaha ngagunakeun MicroProfile API dina karya maranéhanana poé-ka poé. Teras we bakal nutupan API MicroProfile, anu kapaké pikeun pamekar Spring nalika nyiptakeun layanan mikro.
Naha Quarkus? Anu mimiti, ieu mangrupikeun coding langsung, nyaéta, ngamuat ulang otomatis tina sagala parobihan dina MicroProfile API, Spring API sareng API Java anu sanés, anu dilakukeun ku ngan hiji paréntah: mvn quarkus: dev. Bréh, dibahas dina
Kami moal masihan detil ngeunaan MicroProfile, sanés pikeun ngabantosan pamekar Spring ngartos kumaha aranjeunna tiasa nganggo Spring API sareng MicroProfile API di Quarkus.
Wadah sareng Kubernetes
Pikeun ngajaga tulisan ieu saderhana, urang ngan ukur nutupan aspék pangrojong tingkat luhur di dieu.
Quarkus ogé
Tungtungna, ku fokus kana Kubernetes salaku lingkungan panyebaran target, Quarkus henteu nganggo kerangka Java dina kasus dimana fungsionalitas anu sami dilaksanakeun dina tingkat platform Kubernetes sorangan. meja 1 nyadiakeun peta ngeunaan susuratan fungsi antara Kubernetes jeung frameworks Java has dipaké ku pamekar Spring.
Méja 1. Peta korespondensi fungsional antara kerangka Java sareng Kubernetes.
Fungsional
Sapatu Spring Tradisional
Kubernetes
Papanggihan jasa
Eureka
DNS
konfigurasi
Spring Cloud Konfigurasi
Config Maps / Rahasia
Beban balancing
Pita (sisi klien)
Service, Replikasi Controller (sisi server)
Nyusun sareng ngajalankeun kode tina conto
Dina artikel ieu kami tingal
Spring Framework API
Suntikan kagumantungan
Quarkus ngarojong sauntuyan
В
meja 2. Conto pamakéan dirojong Spring DI API.
Dirojong Spring DI Fitur
conto
Suntikan Konstruktor
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Suntikan lapangan
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@ Konfigurasi
@Configuration
public class AppConfiguration {
@Bean(name = "capitalizeFunction")
public StringFunction capitalizer() {
return String::toUpperCase;
}
}
@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
@Override
public String apply(String s) {
return s;
}
}
@Service
public class MessageProducer {
@Value("${greeting.message}")
String message;
public String getPrefix() {
return message;
}
}
kerangka wéb
Pangguna MicroProfile bakal resep yén Quarkus ngadukung JAX-RS, MicroProfile Rest Client, JSON-P, sareng JSON-B salaku modél program wéb primér. Pamekar musim semi bakal resep kana dukungan panganyarna Quarkus pikeun Spring Web API, khususna antarmuka REST. Sarupa jeung Spring DI, tujuan utama pangrojong Spring Web API nyaéta sangkan pamekar Spring ngagunakeun Spring Web API ditéang jeung MicroProfile API. Conto cara ngagunakeun Spring Web API anu dirojong disayogikeun dina Tabél 3, sareng seueur inpormasi sareng conto ngeunaan topik ieu tiasa dipendakan dina tutorial Quarkus anu disebut.
meja 3. Conto ngagunakeun Spring Web API dirojong.
Dirojong Fitur Wéb Spring
conto
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (parsial)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Pangguna MicroProfile ogé bakal ngahargaan yén Quarkus ngadukung JPA nganggo ORM Hibernate. Aya ogé warta alus pikeun pamekar Spring: Quarkus ngarojong umum Spring Data annotations JPA sarta jenis. Conto ngagunakeun API JPA Data Spring anu dirojong dibere dina Tabél 4.
В
meja 4. Conto ngagunakeun didukung Spring Data JPA API.
Dirojong Spring Data JPA Fitur
conto
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragmén Repository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Métode query turunan
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
queries-diartikeun pamaké
public interface MovieRepository
extends CrudRepository {
Movie findFirstByOrderByDurationDesc();
@Query("select m from Movie m where m.rating = ?1")
Iterator findByRating(String rating);
@Query("from Movie where title = ?1")
Movie findByTitle(String title);
}
API MicroProfile
Kasalahan toleransi
Konstruksi kasabaran sesar penting pisan pikeun nyegah kagagalan cascading sareng nyiptakeun arsitéktur microservice anu dipercaya. Pamekar musim semi parantos nganggo pemutus sirkuit pikeun kasabaran kasalahan mangtaun-taun.
meja 5. Conto pamakéan dirojong MicroProfile Sesar Tolerance API.
Fitur Kasabaran Sesar MicroProfile
gambaran
conto
@Asynchronous
Executing logika dina thread misah
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Ngawatesan jumlah requests simultaneous
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Penanganan gagal pinter sareng pamulihan tina kagagalan
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Dijengkang
Nelepon logika alternatif bisi gagal
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Coba deui dina gagal pamundut
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Kagagalan kontrol timeout
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Palayanan Mariksa (Service Health)
Platform Kubernetes ngawas kasehatan wadah nganggo jasa khusus. Pikeun ngamungkinkeun platform dasar pikeun ngawas jasa, pamekar Spring biasana nganggo HealthIndicator khusus sareng Spring Boot Actuator. Dina Quarkus, ieu tiasa dilakukeun nganggo MicroProfile Health, anu sacara standar ngalaksanakeun cek liveness, tapi tiasa dikonpigurasi pikeun mariksa liveness sareng kesiapan sakaligus. Conto cara ngagunakeun API Kaséhatan MicroProfile anu dirojong disayogikeun dina Tabél 6, sareng inpormasi tambahan disayogikeun dina manual Quarkus.
meja 6: conto pamakéan API Kaséhatan MicroProfile dirojong.
Fitur Kaséhatan MicroProfile
gambaran
conto
@Kahirupan
Platform reboots gagal aplikasi wadahna
Titik ahir:
host: 8080 / kasehatan / hirup
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Siap
Platformna moal ngirim lalu lintas ka aplikasi wadahna upami henteu siap
Titik ahir:
host: 8080 / kasehatan / siap
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Métrik
Aplikasi nyayogikeun métrik pikeun tujuan operasional (pikeun ngawas kinerja SLA) atanapi tujuan non-operasional (SLA bisnis). Pamekar spring nyayogikeun métrik nganggo Spring Boot Actuator sareng Micrometer. Sabalikna, Quarkus nganggo MicroProfile Metrics pikeun nyayogikeun métrik dasar (JVM sareng sistem operasi), métrik vendor (Quarkus), sareng métrik aplikasi. MicroProfile Metrics merlukeun palaksanaan ngarojong JSON na OpenMetrics (Prometheus) format kaluaran. Conto pamakean MicroProfile Metrics API dibere dina Tabél 7.
В
meja 7. Conto ngagunakeun MicroProfile métrik API.
MicroProfile metrics Fitur
gambaran
conto
@Diitung
Ngalambangkeun counter counter nu diitung sabaraha kali hiji objek annotated geus disebut
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Ngalambangkeun gauge anu ngitung jumlah telepon sakaligus ka hiji objek annotated
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Ngalambangkeun sensor gauge nu ngukur nilai hiji objek annotated
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Meter
Ngalambangkeun sénsor méteran anu ngawas frékuénsi panggero hiji obyék annotated
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Hiji annotation ngandung émbaran ngeunaan metadata lamun hiji pamundut narima asupkeun atawa ngahasilkeun métrik a
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nunjukkeun timer anu ngalacak durasi hiji objek annotated
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Métrik Endpoints
Métrik aplikasi
metrics dasar
Métrik padagang
Sadaya métrik
MicroProfile Rest Klién
Microservices sering nyayogikeun titik akhir RESTful anu peryogi API klien anu cocog pikeun dianggo. Pikeun nganggo titik tungtung RESTful, pamekar Spring biasana nganggo RestTemplate. Quarkus nawiskeun API Klién Istirahat MicroProfile pikeun ngarengsekeun masalah ieu, conto pamakean anu dipasihkeun dina Tabel 8.
В
meja 8. Conto ngagunakeun MicroProfile Rest Klien API.
MicroProfile Rest Fitur Klién
gambaran
conto
@RegisterRestClient
Ngadaptarkeun antarmuka Java anu diketik salaku klien REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Nyirian palaksanaan hiji conto tina panganteur klien REST diketik
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Namah
Nelepon titik tungtung REST
System.out.println(
restClient.getSalutation());
mp-sésana / url
Nangtukeun titik tungtung REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
hasil
Dina blog ieu, anu ditujukeun utamina pikeun pamekar Spring, urang gancang ningali kumaha cara ngagunakeun Spring API sareng MicroProfile API di Quarkus pikeun ngembangkeun microservices Java teras kompilasi kana kode binér asli anu ngahémat ratusan megabyte RAM sareng diluncurkeun dina hitungan milliseconds.
Sakumaha anjeun parantos kahartos, langkung seueur inpormasi ngeunaan dukungan pikeun Spring sareng MicroProfile API, ogé seueur inpormasi mangpaat anu sanés, tiasa dipendakan di
sumber: www.habr.com