Sæl öll, hér er þriðja færslan í Quarkus seríunni!
Þegar Java örþjónustur eru þróaðar er oft talið að
Í aðeins meiri smáatriðum munum við fyrst skoða umfang og upplýsingar um hvernig Quarkus styður Spring API til að sýna Spring forritara hvernig á að nota MicroProfile API í daglegu starfi sínu. Síðan munum við fjalla um MicroProfile API, sem eru gagnleg fyrir Spring forritara þegar þeir búa til örþjónustur.
Af hverju Quarkus? Í fyrsta lagi er þetta lifandi kóðun, það er sjálfvirk endurhleðsla á öllum breytingum á MicroProfile API, Spring API og öðrum Java API, sem er framkvæmd með aðeins einni skipun: mvn quarkus:dev. Í öðru lagi, talið í
Við munum ekki fara í smáatriði um MicroProfile, annað en að hjálpa Spring forriturum að skilja hvernig þeir geta notað Spring API með MicroProfile API í Quarkus.
Gámar og Kubernetes
Til að halda þessari grein einfaldri munum við aðeins fjalla um háþróaða þætti stuðnings hér.
Quarkus líka
Að lokum, með því að einbeita sér að Kubernetes sem markdreifingarumhverfi, notar Quarkus ekki Java ramma í þeim tilvikum þar sem svipuð virkni er innleidd á vettvangi Kubernetes vettvangsins sjálfs. Tafla 1 gefur upp kort af virknisamsvörun milli Kubernetes og dæmigerðra Java ramma sem Spring forritarar nota.
Tafla 1. Kort af virknisamsvörun milli Java ramma og Kubernetes.
Virkni
Hefðbundin vorstígvél
Kubernetes
Þjónustuuppgötvun
Eureka
DNS
Stillingar
Vorskýjastilling
Stilla kort/leyndarmál
Hlaðajafnvægi
Borði (viðskiptavinur megin)
Þjónusta, afritunarstýring (miðlarahlið)
Að setja saman og keyra kóðann úr dæminu
Í þessari grein vísum við til
Spring Framework API
Háð innspýting
Quarkus styður úrval af
В
Tafla 2. Dæmi um notkun studd Spring DI API.
Styður Spring DI eiginleikar
dæmi
Constructor Injection
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Innspýting á vettvangi
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Stillingar
@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;
}
}
Veframmi
MicroProfile notendur munu elska að Quarkus styður JAX-RS, MicroProfile Rest Client, JSON-P og JSON-B sem aðal vefforritunarlíkanið. Vorhönnuðir munu vera ánægðir með nýlegan stuðning Quarkus við Spring Web API, sérstaklega REST viðmót. Líkt og Spring DI er aðalmarkmið Spring Web API stuðningsins að gera Spring forritara kleift að nota Spring Web API í tengslum við MicroProfile API. Dæmi um hvernig á að nota studdu Spring Web API er að finna í töflu 3 og frekari upplýsingar og dæmi um þetta efni er að finna í Quarkus kennslunni sem heitir
Tafla 3. Dæmi um notkun studd Spring Web API.
Styður Spring Web Features
dæmi
@ RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (að hluta)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Vorgögn JPA
MicroProfile notendur munu einnig meta að Quarkus styður JPA með því að nota Hibernate ORM. Það eru líka góðar fréttir fyrir Spring forritara: Quarkus styður algengar Spring Data JPA athugasemdir og tegundir. Dæmi um notkun studdu Spring Data JPA API eru í töflu 4.
В
Tafla 4. Dæmi um notkun studd Spring Data JPA API.
Styður Spring Data JPA eiginleikar
dæmi
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Geymsla
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Geymslubrot
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Afleiddar fyrirspurnaaðferðir
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Notendaskilgreindar fyrirspurnir
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);
}
MicroProfile API
Bilunarþol
Bilunarþolsbyggingar eru mjög mikilvægar til að koma í veg fyrir bilanir í steypum og búa til áreiðanlega örþjónustuarkitektúr. Vorframleiðendur hafa notað aflrofa fyrir bilanaþol í mörg ár.
Tafla 5. Dæmi um notkun studd MicroProfile Fault Tolerance API.
MicroProfile villuþol eiginleika
Lýsing
dæmi
@Ósamstilltur
Framkvæma rökfræði í sérstökum þræði
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Þil
Takmarkaðu fjölda beiðna samtímis
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Snjöll meðhöndlun bilana og endurheimt frá bilunum
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Hringir í aðra rökfræði ef bilun verður
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Reyndu aftur ef beiðni mistekst
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Tímamörk bilunarstýringar
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Athugunarþjónusta (Service Health)
Kubernetes pallar fylgjast með heilsu gáma með því að nota sérstaka þjónustu. Til að leyfa undirliggjandi vettvangi að fylgjast með þjónustu, nota Spring verktaki venjulega sérsniðinn HealthIndicator og Spring Boot Actuator. Í Quarkus er hægt að gera þetta með því að nota MicroProfile Health, sem framkvæmir sjálfgefið athugun á lífgildi, en hægt er að stilla það til að kanna samtímis lífleika og viðbúnað. Dæmi um hvernig á að nota studdu MicroProfile Health API eru í töflu 6 og viðbótarupplýsingar eru veittar í Quarkus handbókinni
Tafla 6: Dæmi um notkun á studdum MicroProfile Health API.
MicroProfile Health eiginleikar
Lýsing
dæmi
@Lífsgleði
Endurræsingar vettvangsins misheppnuðust gámaforrit
Endapunktur:
gestgjafi:8080/heilsa/lifandi
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Viðbúið
Vettvangurinn mun ekki senda umferð í gámaforrit ef hann er ekki tilbúinn
Endapunktur:
gestgjafi:8080/heilsa/tilbúinn
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mælingar
Forrit veita mælikvarða annaðhvort í rekstrarlegum tilgangi (til að fylgjast með frammistöðu SLAs) eða ekki-rekstrarlegum tilgangi (Business SLAs). Vorhönnuðir veita mælikvarða með því að nota Spring Boot Actuator og Micrometer. Aftur á móti notar Quarkus MicroProfile Metrics til að veita grunnmælingar (JVM og stýrikerfi), sölumælingar (Quarkus) og forritamælingar. MicroProfile Metrics krefst þess að útfærslan styðji JSON og OpenMetrics (Prometheus) úttakssnið. Dæmi um notkun MicroProfile Metrics API eru gefin í töflu 7.
В
Tafla 7. Dæmi um notkun MicroProfile Metrics API.
Eiginleikar MicroProfile Metrics
Lýsing
dæmi
@Talið
Táknar teljara sem telur hversu oft hefur verið hringt í athugasemd með athugasemdum
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Táknar mælikvarða sem telur fjölda samhliða símtölum í athugasemd með athugasemdum
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Mæjari
Táknar mæliskynjara sem mælir gildi hlutar með athugasemdum
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Mælt
Táknar mæliskynjara sem fylgist með símtalstíðni merkts hlutar
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Skýring sem inniheldur upplýsingar um lýsigögn þegar beiðni berst um að slá inn eða framleiða mæligildi
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Gefur til kynna tímamælir sem fylgist með tímalengd hlutar með athugasemdum
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Mælingar endapunktar
Forritsmælingar
Grunnmælingar
Mælingar söluaðila
Allar mælingar
MicroProfile Rest viðskiptavinur
Örþjónustur bjóða oft upp á RESTful endapunkta sem krefjast samsvarandi API viðskiptavina til að starfa á þeim. Til að nota RESTful endapunkta nota Spring verktaki venjulega RestTemplate. Quarkus býður upp á MicroProfile Rest Client API til að leysa þetta vandamál, dæmi um notkun eru gefin í töflu 8.
В
Tafla 8. Dæmi um notkun MicroProfile Rest Client API.
Eiginleikar MicroProfile Rest Client
Lýsing
dæmi
@RegisterRestClient
Skráir vélritað Java viðmót sem REST biðlara
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Merkir innleiðingu á tilviki vélritaðs REST biðlaraviðmóts
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
ákall
Hringir í REST endapunkt
System.out.println(
restClient.getSalutation());
mp-rest/url
Tilgreinir REST endapunkt
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Niðurstöður
Í þessu bloggi, sem er fyrst og fremst ætlað að Spring forritara, skoðuðum við fljótlega hvernig á að nota Spring API með MicroProfile API í Quarkus til að þróa Java örþjónustur og setja þær síðan saman í innfæddan tvíundarkóða sem sparar hundruð megabæta af vinnsluminni og opnar í spurning um millisekúndur.
Eins og þú hefur þegar skilið, er að finna frekari upplýsingar um stuðning við Spring og MicroProfile API, sem og margar aðrar gagnlegar upplýsingar í
Heimild: www.habr.com