Kumusta sa lahat, narito ang ikatlong post sa serye ng Quarkus!

Kapag bumubuo ng mga microservice ng Java, madalas itong pinaniniwalaan и ay hiwalay at independiyenteng mga API. Bilang default, kadalasang ginagamit ng mga programmer ang mga API na nakasanayan na nila, dahil nangangailangan ng maraming oras ang pag-aaral ng mga bagong framework at runtime component. Ngayon ay susubukan naming gawing simple ang pag-unlad ng ilang sikat at ipakita sa iyo kung paano gamitin nang sabay-sabay ang Spring API at mga bagong kapaki-pakinabang na feature .
Sa kaunting detalye, titingnan muna natin ang saklaw at mga detalye kung paano sinusuportahan ng Quarkus ang mga Spring API upang ipakita sa mga developer ng Spring kung paano gamitin ang MicroProfile API sa kanilang pang-araw-araw na gawain. Pagkatapos ay tatalakayin namin ang mga MicroProfile API, na kapaki-pakinabang para sa mga developer ng Spring kapag gumagawa ng mga microservice.
Bakit Quarkus? Una, ito ay live na coding, ibig sabihin, awtomatikong pag-reload ng anumang mga pagbabago sa MicroProfile API, Spring API at iba pang mga Java API, na ginagawa sa isang command lang: mvn quarkus:dev. Pangalawa, isinasaalang-alang sa ang serbisyo ng Tao (na nag-compile mula sa Spring, MicroProfile, at JPA APIs sa isang binary gamit ang native na GraalVM image) ay magsisimula sa loob lamang ng 0.055 segundo at tumatagal ng humigit-kumulang 90 MB ng RAM (RSS) sa RESTful application endpoint. Bukod dito, ang compilation nito mismo ay ginagawa gamit ang isang command: mvn package -Pnative.
Hindi na kami magdedetalye tungkol sa MicroProfile, maliban sa tulungan ang mga developer ng Spring na maunawaan kung paano nila magagamit ang mga Spring API na may mga MicroProfile API sa Quarkus.
Mga lalagyan at Kubernete
Upang panatilihing simple ang artikulong ito, sasaklawin lang namin ang mga mataas na antas ng aspeto ng suporta dito. , dahil mahalagang maunawaan. Ang Quarkus ay nakaposisyon bilang isang Java stack para sa Kubernetes, ito ay idinisenyo upang mabawasan ang pagkonsumo ng memorya at oras ng pagsisimula ng mga aplikasyon at serbisyo ng Java, at, bilang resulta, pataasin ang kanilang density sa host at bawasan ang kabuuang gastos.
Quarkus din Mga mapagkukunan at alok ng Kubernetes para sa pag-deploy sa mga platform ng Kubernetes at Red Hat OpenShift. Bilang karagdagan, awtomatikong bumubuo ang Quarkus ng Dockerfile.jvm (JVM packaging) at Dockerfile.native (native binary packaging) na mga file na kailangan para gumawa ng mga container.
Sa wakas, sa pamamagitan ng pagtutok sa Kubernetes bilang target na deployment environment, hindi gumagamit ang Quarkus ng mga Java framework sa mga kaso kung saan ipinatupad ang katulad na functionality sa antas ng Kubernetes platform mismo. Ang Talahanayan 1 ay nagbibigay ng mapa ng functional na sulat sa pagitan ng Kubernetes at mga karaniwang Java framework na ginagamit ng mga developer ng Spring.
Talahanayan 1. Mapa ng functional correspondence sa pagitan ng Java frameworks at Kubernetes.
Gumagana
Tradisyonal na Spring Boot
Kubernetes
Pagtuklas ng serbisyo
Eureka
DNS
Configuration
Spring Cloud Config
I-configure ang Mga Mapa/Sikreto
Mag-load balancing
Ribbon (panig ng kliyente)
Serbisyo, Replication Controller (server side)
Pag-compile at pagpapatakbo ng code mula sa halimbawa
Sa artikulong ito ay tinutukoy namin , kung saan ang Spring at MicroProfile API at maging ang parehong klase ng Java ay ginagamit nang magkasama. Ang code sa halimbawang ito ay maaaring i-compile at patakbuhin mula sa command line, tingnan ang README.md file para sa mga detalye.
Mga Spring Framework API
Depensyon ng Iniksyon
Sinusuportahan ng Quarkus ang isang hanay ng at mga Spring Dependency Injection (Spring DI) API. Kung nagtatrabaho ka sa MicroProfile, , pagkatapos ay pamilyar na pamilyar ka sa CDI. Sa kabilang banda, maaaring gamitin ng mga developer ng Spring ang Quarkus Extension para sa Spring DI API upang makamit ang pagiging tugma sa Spring DI. Ang mga halimbawa ng paggamit ng mga sinusuportahang Spring DI API ay ibinibigay sa Talahanayan 2.
В Gumagamit ng parehong CDI at Spring Dependency Injection. Para sa karagdagang impormasyon at mga halimbawa sa paksang ito, tingnan ang tinatawag na gabay ng Quarkus .
Talahanayan 2. Mga halimbawa ng paggamit ng mga sinusuportahang Spring DI API.
Mga Sinusuportahang Feature ng Spring DI
Mga halimbawa
Constructor Injection
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Field Injection
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Configuration
@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;
}
}
Framework sa web
Magugustuhan ng mga user ng MicroProfile na sinusuportahan ng Quarkus ang JAX-RS, MicroProfile Rest Client, JSON-P, at JSON-B bilang pangunahing modelo ng web programming. Ang mga developer ng tagsibol ay nalulugod sa kamakailang suporta ng Quarkus para sa Spring Web API, sa partikular na mga interface ng REST. Katulad ng Spring DI, ang pangunahing layunin ng suporta sa Spring Web API ay paganahin ang mga developer ng Spring na gumamit ng mga Spring Web API kasabay ng mga MicroProfile API. Ang mga halimbawa ng kung paano gamitin ang mga sinusuportahang Spring Web API ay ibinibigay sa Talahanayan 3, at higit pang impormasyon at mga halimbawa sa paksang ito ay makikita sa Quarkus tutorial na tinatawag na .
Talahanayan 3. Mga halimbawa ng paggamit ng mga sinusuportahang Spring Web API.
Mga sinusuportahang Spring Web Features
Mga halimbawa
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (bahagyang)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Mapapahalagahan din ng mga user ng MicroProfile na sinusuportahan ng Quarkus ang JPA gamit ang Hibernate ORM. Mayroon ding magandang balita para sa mga developer ng Spring: Sinusuportahan ng Quarkus ang mga karaniwang anotasyon at uri ng Spring Data JPA. Ang mga halimbawa ng paggamit ng mga sinusuportahang Spring Data JPA API ay ibinibigay sa Talahanayan 4.
В Ang Spring Data JPA API ay ginagamit at higit pang impormasyon ang available sa Quarkus tutorial na tinatawag .
Talahanayan 4. Mga halimbawa ng paggamit ng mga sinusuportahang Spring Data JPA API.
Mga Sinusuportahang Feature ng Spring Data JPA
Mga halimbawa
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Mga Fragment ng Imbakan
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Nagmula sa mga pamamaraan ng query
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Mga query na tinukoy ng user
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);
}
Mga MicroProfile API
Pagpapahintulot sa kasalanan
Napakahalaga ng mga fault tolerance construct para maiwasan ang mga cascading failure at paglikha ng maaasahang mga arkitektura ng microservice. Ang mga developer ng tagsibol ay gumagamit ng mga circuit-breaker para sa fault tolerance sa loob ng maraming taon. . Gayunpaman, ang Hystrix ay hindi na-update sa loob ng mahabang panahon, ngunit ang Fault Tolerance ng MicroProfile ay aktibong umuunlad at may ilang taon ng paggamit sa produksyon sa likod nito. Samakatuwid, upang mapabuti ang pagiging maaasahan ng mga serbisyo sa Quarkus, inirerekomendang gamitin ang MicroProfile Fault Tolerance API, ang mga halimbawa nito ay ginagamit sa Talahanayan 5. Para sa higit pang impormasyon tungkol dito, tingnan ang manwal ng Quarkus .
Talahanayan 5. Mga halimbawa ng paggamit ng mga sinusuportahang MicroProfile Fault Tolerance API.
Mga Feature ng MicroProfile Fault Tolerance
Описание
Mga halimbawa
@Asynchronous
Pagpapatupad ng lohika sa isang hiwalay na thread
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Limitahan ang bilang ng mga sabay-sabay na kahilingan
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Smart failure handling at pagbawi mula sa mga pagkabigo
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Umurong
Pagtawag ng alternatibong lohika kung sakaling mabigo
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Subukan muli kapag nabigo ang kahilingan
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Pag-timeout ng mabigong kontrol
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Pagsusuri ng mga serbisyo (Service Health)
Sinusubaybayan ng mga platform ng Kubernetes ang kalusugan ng mga container gamit ang mga espesyal na serbisyo. Upang payagan ang pinagbabatayan na platform na subaybayan ang mga serbisyo, karaniwang gumagamit ang mga developer ng Spring ng isang custom na HealthIndicator at Spring Boot Actuator. Sa Quarkus, maaari itong gawin gamit ang MicroProfile Health, na bilang default ay nagsasagawa ng liveness check, ngunit maaaring i-configure upang sabay na suriin ang liveness at kahandaan. Ang mga halimbawa ng kung paano gamitin ang mga sinusuportahang MicroProfile Health API ay ibinibigay sa Talahanayan 6, at ang karagdagang impormasyon ay ibinibigay sa manwal ng Quarkus .
Talahanayan 6: Mga halimbawa ng paggamit ng mga sinusuportahang MicroProfile Health API.
Mga tampok ng MicroProfile Health
Описание
Mga halimbawa
@Liveness
Nabigo ang pag-reboot ng platform sa mga containerized na application
Endpoint:
host:8080/kalusugan/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Kahandaan
Ang platform ay hindi magpapadala ng trapiko sa mga containerized na application kung hindi pa ito handa
Endpoint:
host:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mga sukatan
Nagbibigay ang mga application ng mga sukatan para sa alinman sa mga layunin ng pagpapatakbo (upang subaybayan ang mga SLA ng pagganap) o mga layuning hindi pagpapatakbo (mga SLA ng negosyo). Nagbibigay ang mga developer ng spring ng mga sukatan gamit ang Spring Boot Actuator at Micrometer. Sa turn, gumagamit ang Quarkus ng MicroProfile Metrics para magbigay ng mga baseline metrics (JVM at operating system), vendor metrics (Quarkus), at application metrics. Kinakailangan ng MicroProfile Metrics na sinusuportahan ng pagpapatupad ang mga format ng output ng JSON at OpenMetrics (Prometheus). Ang mga halimbawa ng paggamit ng MicroProfile Metrics API ay ibinibigay sa Talahanayan 7.
В Ginagamit ang MicroProfile metrics para magbigay ng mga sukatan ng application. Para sa karagdagang impormasyon, tingnan ang manwal ng Quarkus .
Talahanayan 7. Mga halimbawa ng paggamit ng mga MicroProfile Metrics API.
Mga Tampok ng MicroProfile Sukatan
Описание
Mga halimbawa
@Bilang
Nagsasaad ng counter counter na nagbibilang ng bilang ng beses na tinawag ang isang annotated na bagay
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Nagsasaad ng gauge na nagbibilang ng bilang ng mga sabay-sabay na tawag sa isang annotated na bagay
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Panukat
Nagsasaad ng gauge sensor na sumusukat sa halaga ng isang annotated na bagay
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Nagsasaad ng meter sensor na sumusubaybay sa dalas ng tawag ng isang naka-annotate na bagay
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Isang anotasyon na naglalaman ng impormasyon tungkol sa metadata kapag natanggap ang isang kahilingan na magpasok o gumawa ng sukatan
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nagsasaad ng timer na sumusubaybay sa tagal ng isang annotated na bagay
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Mga Endpoint ng Sukat
Mga sukatan ng aplikasyon :8080/metrics/application
Mga pangunahing sukatan :8080/metrics/base
Mga sukatan ng vendor :8080/metrics/vendor
Lahat ng sukatan :8080/sukat
MicroProfile Rest Client
Ang mga microservice ay madalas na nagbibigay ng mga RESTful na endpoint na nangangailangan ng kaukulang mga API ng kliyente upang gumana. Upang gumamit ng mga RESTful na endpoint, karaniwang ginagamit ng mga developer ng Spring ang RestTemplate. Nag-aalok ang Quarkus ng mga MicroProfile Rest Client API upang malutas ang problemang ito, ang mga halimbawa ng paggamit nito ay ibinigay sa Talahanayan 8.
В ang paggamit ng mga RESTful na endpoint ay ginagawa gamit ang MicroProfile Rest Client. Higit pang impormasyon at mga halimbawa sa paksang ito ay matatagpuan sa manwal ng Quarkus .
Talahanayan 8. Mga halimbawa ng paggamit ng mga MicroProfile Rest Client API.
Mga Tampok ng MicroProfile Rest Client
Описание
Mga halimbawa
@RegisterRestClient
Nagrerehistro ng naka-type na Java interface bilang isang REST client
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Minamarkahan ang pagpapatupad ng isang instance ng isang na-type na REST client interface
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Pagsamba
Tumatawag ng REST endpoint
System.out.println(
restClient.getSalutation());
mp-pahinga/url
Tinutukoy ang REST endpoint
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Mga resulta ng
Sa blog na ito, na pangunahing nakatuon sa mga developer ng Spring, mabilis naming tiningnan kung paano gamitin ang mga Spring API kasama ang mga MicroProfile API sa Quarkus upang bumuo ng mga microservice ng Java at pagkatapos ay i-compile ang mga ito sa katutubong binary code na nakakatipid ng daan-daang megabytes ng RAM at inilulunsad sa isang bagay ng milliseconds.
Tulad ng naintindihan mo na, higit pang impormasyon tungkol sa suporta para sa Spring at MicroProfile API, pati na rin ang maraming iba pang kapaki-pakinabang na impormasyon, ay matatagpuan sa .
Pinagmulan: www.habr.com
