Helo pawb, dyma'r trydydd postiad yn y gyfres Quarkus!
Wrth ddatblygu microwasanaethau Java, credir yn aml fod
Mewn ychydig mwy manwl, byddwn yn gyntaf yn edrych ar gwmpas a manylion sut mae Quarkus yn cefnogi APIs Gwanwyn i ddangos i ddatblygwyr y Gwanwyn sut i ddefnyddio'r API MicroProfile yn eu gwaith o ddydd i ddydd. Yna byddwn yn ymdrin Γ’'r API MicroProfile, sy'n ddefnyddiol i ddatblygwyr y Gwanwyn wrth greu microwasanaethau.
Pam Quarkus? Yn gyntaf, codio byw yw hwn, hynny yw, ail-lwytho'n awtomatig unrhyw newidiadau yn yr API MicroProfile, Spring API ac APIs Java eraill, sy'n cael ei berfformio gydag un gorchymyn yn unig: mvn quarkus:dev. Yn ail, a drafodwyd yn
Ni fyddwn yn manylu ar MicroProfile, heblaw am helpu datblygwyr y Gwanwyn i ddeall sut y gallant ddefnyddio APIs Gwanwyn gydag APIs MicroProfile yn Quarkus.
Cynhwysyddion a Kubernetes
Er mwyn cadw'r erthygl hon yn syml, dim ond yr agweddau lefel uchel o gefnogaeth y byddwn yn eu cwmpasu yma.
Quarkus hefyd
Yn olaf, trwy ganolbwyntio ar Kubernetes fel yr amgylchedd lleoli targed, nid yw Quarkus yn defnyddio fframweithiau Java mewn achosion lle mae ymarferoldeb tebyg yn cael ei weithredu ar lefel platfform Kubernetes ei hun. Mae Tabl 1 yn darparu map o'r ohebiaeth swyddogaethol rhwng Kubernetes a fframweithiau Java nodweddiadol a ddefnyddir gan ddatblygwyr Spring.
Tabl 1. Map o ohebiaeth swyddogaethol rhwng fframweithiau Java a Kubernetes.
Swyddogaethol
Esgid y Gwanwyn Traddodiadol
Kubernetes
Darganfod gwasanaeth
Eureka
DNS
ffurfweddiad
Ffurfwedd Cwmwl y Gwanwyn
Mapiau/Cyfrinachau Ffurfweddu
Cydbwyso llwyth
Rhuban (ochr y cleient)
Gwasanaeth, Rheolydd Atgynhyrchu (ochr y gweinydd)
Llunio a rhedeg y cod o'r enghraifft
Yn yr erthygl hon rydym yn cyfeirio at
APIs Fframwaith y Gwanwyn
Chwistrelliad Dibyniaeth
Mae Quarkus yn cefnogi ystod o
Π
Tabl 2. Enghreifftiau o ddefnyddio APIs Spring DI a gefnogir.
Nodweddion DI Gwanwyn a Gefnogir
ΠΡΠΈΠΌΠ΅ΡΡ
Chwistrelliad Adeiladwr
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Chwistrelliad Maes
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Cyfluniad
@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;
}
}
Fframwaith gwe
Bydd defnyddwyr MicroProfile wrth eu bodd bod Quarkus yn cefnogi JAX-RS, MicroProfile Rest Client, JSON-P, a JSON-B fel y model rhaglennu gwe sylfaenol. Bydd datblygwyr y gwanwyn yn falch o gefnogaeth ddiweddar Quarkus i API Spring Web, yn enwedig rhyngwynebau REST. Yn debyg i Spring DI, prif nod cefnogaeth Spring Web API yw galluogi datblygwyr Spring i ddefnyddio Spring Web APIs ar y cyd ag API MicroProfile. Darperir enghreifftiau o sut i ddefnyddio'r APIs Spring Web a gefnogir yn Nhabl 3, a cheir rhagor o wybodaeth ac enghreifftiau ar y pwnc hwn yn y tiwtorial Quarkus o'r enw
Tabl 3. Enghreifftiau o ddefnyddio API Gwe Gwanwyn a gefnogir.
Nodweddion Gwe Gwanwyn a Gefnogir
ΠΡΠΈΠΌΠ΅ΡΡ
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapio
@PutMapio
@DeleteMapping
@PatchMapping
@CaisParam
@RequestHeader
@MatrixAmrywiol
@PathAmrywiol
@CookieValue
@CaisBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (rhannol)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
JPA Data Gwanwyn
Bydd defnyddwyr MicroProfile hefyd yn gwerthfawrogi bod Quarkus yn cefnogi JPA gan ddefnyddio'r Hibernate ORM. Mae yna newyddion da hefyd i ddatblygwyr y Gwanwyn: mae Quarkus yn cefnogi anodiadau a mathau cyffredin o JPA Data Gwanwyn. Rhoddir enghreifftiau o ddefnyddioβr APIs JPA Data Gwanwyn a gefnogir yn Nhabl 4.
Π
Tabl 4. Enghreifftiau o ddefnyddio APIs JPA Data Gwanwyn a gefnogir.
Nodweddion JPA Data Gwanwyn a Gefnogir
ΠΡΠΈΠΌΠ΅ΡΡ
Ystorfa Crud
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaYstorfa
Ystorfa PagingAndSorting
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Darnau Cadwrfa
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Dulliau ymholiad sy'n deillio
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Ymholiadau wedi'u diffinio gan ddefnyddwyr
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);
}
APIs MicroProffil
Goddefgarwch bai
Mae lluniadau goddefgarwch diffyg yn bwysig iawn ar gyfer atal methiannau rhaeadru a chreu pensaernΓ―aeth microwasanaeth dibynadwy. Mae datblygwyr y gwanwyn wedi bod yn defnyddio torwyr cylched i oddef diffygion ers blynyddoedd lawer.
Tabl 5. Enghreifftiau o ddefnyddio API Goddefiad Nam MicroProfile a gefnogir.
Nodweddion Goddefgarwch Nam MicroProfile
Disgrifiad
ΠΡΠΈΠΌΠ΅ΡΡ
@Asynchronous
Gweithredu rhesymeg mewn edefyn ar wahΓ’n
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Cyfyngu ar nifer y ceisiadau cydamserol
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Trin methiant craff ac adferiad o fethiannau
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@cwymp
Galw rhesymeg amgen rhag ofn y bydd methiant
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Rhowch gynnig arall arni ar gais methu
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Goramser rheoli methiant
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Gwasanaethau gwirio (Gwasanaeth Iechyd)
Mae llwyfannau Kubernetes yn monitro iechyd cynwysyddion gan ddefnyddio gwasanaethau arbennig. Er mwyn caniatΓ‘u i'r platfform gwaelodol fonitro gwasanaethau, mae datblygwyr y Gwanwyn fel arfer yn defnyddio Dangosydd Iechyd wedi'i deilwra ac Actuator Boot Spring. Yn Quarkus, gellir gwneud hyn gan ddefnyddio MicroProfile Health, sydd yn ddiofyn yn cynnal gwiriad bywiogrwydd, ond y gellir ei ffurfweddu i wirio bywiogrwydd a pharodrwydd ar yr un pryd. Darperir enghreifftiau o sut i ddefnyddio'r APIs MicroProfile Health a gefnogir yn Nhabl 6, a darperir gwybodaeth ychwanegol yn llawlyfr Quarkus
Tabl 6: Enghreifftiau defnydd o APIs MicroProfile Health a gefnogir.
Nodweddion MicroProfile Health
Disgrifiad
ΠΡΠΈΠΌΠ΅ΡΡ
@bywoliaeth
Mae'r platfform yn ailgychwyn cymwysiadau wedi'u cynhwysyddio wedi methu
Diweddbwynt:
gwesteiwr:8080/iechyd/byw
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@parodrwydd
Ni fydd y platfform yn anfon traffig i gymwysiadau cynhwysydd os nad yw'n barod
Diweddbwynt:
gwesteiwr:8080/iechyd/yn barod
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metrigau
Mae ceisiadau'n darparu metrigau naill ai at ddibenion gweithredol (i fonitro CLGau perfformiad) neu at ddibenion anweithredol (CLGau busnes). Mae datblygwyr y gwanwyn yn darparu metrigau gan ddefnyddio Spring Boot Actuator a Micrometer. Yn ei dro, mae Quarkus yn defnyddio MicroProfile Metrics i ddarparu metrigau llinell sylfaen (JVM a system weithredu), metrigau gwerthwr (Quarkus), a metrigau cais. Mae MicroProfile Metrics yn mynnu bod y gweithrediad yn cefnogi fformatau allbwn JSON ac OpenMetrics (Prometheus). Rhoddir enghreifftiau o ddefnyddio API Metrigau MicroProfile yn Nhabl 7.
Π
Tabl 7. Enghreifftiau o ddefnyddio API Metrig MicroProfile.
Nodweddion Metrigau MicroProffil
Disgrifiad
ΠΡΠΈΠΌΠ΅ΡΡ
@cyfrif
Yn dynodi rhifydd sy'n cyfrif sawl gwaith y mae gwrthrych anodedig wedi'i alw
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Yn dynodi mesurydd sy'n cyfrif nifer y galwadau cydamserol i wrthrych anodedig
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Yn dynodi synhwyrydd mesurydd sy'n mesur gwerth gwrthrych anodedig
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Yn dynodi synhwyrydd mesurydd sy'n monitro amlder galwadau gwrthrych anodedig
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Anodiad yn cynnwys gwybodaeth am fetadata pan dderbynnir cais i fewnbynnu neu gynhyrchu metrig
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Yn dynodi amserydd sy'n olrhain hyd gwrthrych anodedig
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Pwyntiau Terfyn Metrics
Metrigau cais
Metrigau sylfaenol
metrigau gwerthwr
Pob metrig
Cleient Rest MicroProfile
Mae microservices yn aml yn darparu pwyntiau terfyn RESTful sy'n gofyn am APIs cleient cyfatebol i weithio gyda nhw. I ddefnyddio pwyntiau terfyn RESTful, mae datblygwyr y Gwanwyn fel arfer yn defnyddio RestTemplate. Mae Quarkus yn cynnig API Cleient Rest MicroProfile i ddatrys y broblem hon, a rhoddir enghreifftiau o ddefnydd ohonynt yn Nhabl 8.
Π
Tabl 8. Enghreifftiau o ddefnyddio API Cleient Rest MicroProfile.
Nodweddion Cleient Rest MicroProfile
Disgrifiad
ΠΡΠΈΠΌΠ΅ΡΡ
@RegisterRestClient
Yn cofrestru rhyngwyneb Java wedi'i deipio fel cleient REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Yn nodi gweithredu enghraifft o ryngwyneb cleient REST wedi'i deipio
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Ymglymiad
Yn galw pwynt terfyn REST
System.out.println(
restClient.getSalutation());
mp-gweddill/url
Yn pennu diweddbwynt REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Canlyniadau
Yn y blog hwn, sydd wedi'i anelu'n bennaf at ddatblygwyr y Gwanwyn, fe wnaethom edrych yn gyflym ar sut i ddefnyddio APIs y Gwanwyn gyda'r API MicroProfile yn Quarkus i ddatblygu microwasanaethau Java ac yna eu llunio i god deuaidd brodorol sy'n arbed cannoedd o megabeit o RAM ac yn lansio i mewn. mater o filieiliadau.
Fel y dealloch eisoes, mae mwy o wybodaeth am gefnogaeth ar gyfer API Gwanwyn a MicroProffil, yn ogystal Γ’ llawer o wybodaeth ddefnyddiol arall, ar gael yn
Ffynhonnell: hab.com