Halo a h-uile duine, seo an treas post san t-sreath Quarkus!

Nuair a bhios tu aâ leasachadh microservices Java, thathas gu tric aâ creidsinn sin и nan APIan fa leth agus neo-eisimeileach. Gu gnĂ thach, bidh luchd-prògramaidh buailteach a bhith aâ cleachdadh na APIan ris a bheil iad cleachdte mu thrĂ th, leis gu bheil ionnsachadh frèaman Ăšra agus co-phĂ irtean runtime aâ toirt tòrr Ăšine. An-diugh feuchaidh sinn ri leasachadh cuid mòr-chòrdte a dhèanamh nas sĂŹmplidhe agus aâ sealltainn dhut mar a chleachdas tu an Spring API agus feartan feumail Ăšra aig an aon Ă m .
Ann am beagan nas mionaidiche, bheir sinn sĂšil an-toiseach air farsaingeachd agus mion-fhiosrachadh air mar a tha Quarkus aâ toirt taic do Spring APIs gus sealltainn do luchd-leasachaidh an Earraich mar a chleachdas iad an MicroProfile API nan obair lĂ itheil. An uairsin còmhdaichidh sinn na MicroProfile APIs, a tha feumail do luchd-leasachaidh an Earraich nuair a bhios iad aâ cruthachadh microservices.
Carson a tha Quarkus? An toiseach, is e còdadh beò a tha seo, is e sin, ath-luchdachadh gu fèin-ghluasadach air atharrachaidhean sam bith anns an MicroProfile API, Spring API agus Java API eile, a thèid a dhèanamh le dĂŹreach aon Ă ithne: mvn quarkus: dev. San dara h-Ă ite, beachdachadh ann an bidh an t-seirbheis Pearsa (a bhios aâ cruinneachadh bho Spring, MicroProfile, agus JPA APIs a-steach gu binary aâ cleachdadh an ĂŹomhaigh dhĂšthchasach GraalVM) aâ tòiseachadh ann an dĂŹreach 0.055 diogan agus aâ toirt suas mu 90 MB de RAM (RSS) air ceann-uidhe an tagraidh RESTful. A bharrachd air an sin, tha an cruinneachadh aige fhèin air a dhèanamh le dĂŹreach aon Ă ithne: mvn package -Pnative.
Cha tèid sinn a-steach gu mion-fhiosrachadh mu MicroProfile, ach a-mhĂ in gus luchd-leasachaidh an Earraich a chuideachadh aâ tuigsinn mar as urrainn dhaibh Spring APIs a chleachdadh le APIan MicroProfile ann an Quarkus.
Containers agus Kubernetes
Gus an artaigil seo a chumail sĂŹmplidh, cha bhith sinn aâ còmhdach ach na taobhan Ă rd-ĂŹre de thaic an seo. , oir tha e cudromach tuigsinn. Tha Quarkus air a shuidheachadh mar stac Java airson Kubernetes, tha e air a dhealbhadh gus caitheamh cuimhne agus Ăšine tòiseachaidh de thagraidhean agus seirbheisean Java a lughdachadh, agus, mar thoradh air an sin, an dĂšmhlachd air an òstair Ă rdachadh agus cosgaisean iomlan a lughdachadh.
Quarkus cuideachd Goireasan agus tairgsean Kubernetes airson a chleachdadh air Ă rd-Ăšrlaran Kubernetes agus Red Hat OpenShift. A bharrachd air an sin, bidh Quarkus gu fèin-ghluasadach aâ gineadh na faidhlichean Dockerfile.jvm (pacadh JVM) agus Dockerfile.native (pacadh binary dĂšthchasach) a dhâ fheumar gus soithichean a chruthachadh.
Mu dheireadh, le bhith ag amas air Kubernetes mar an Ă rainneachd cleachdadh targaid, cha bhith Quarkus aâ cleachdadh frèaman Java ann an cĂšisean far a bheil gnĂŹomhachd coltach ris air a chuir an gnĂŹomh aig ĂŹre Ă rd-Ăšrlar Kubernetes fhèin. Tha ClĂ r 1 aâ toirt seachad mapa den chonaltradh gnĂŹomh eadar Kubernetes agus frèaman Ă bhaisteach Java a bhios luchd-leasachaidh an Earraich aâ cleachdadh.
Clà r 1. Mapa de chonaltradh gnÏomhail eadar frèaman Java agus Kubernetes.
GnĂŹomh
Boot traidiseanta an earraich
Kubernetes
Lorg seirbheis
Eureka
DNS
Configuration
Spring Cloud Config
Mapaichean rèiteachaidh / dÏomhaireachd
Luchdaich cothromachadh
Ribbon (taobh teachdaiche)
Seirbheis, Rianadair Mac-samhail (taobh an fhrithealaiche)
Aâ cur ri chèile agus aâ ruith aâ chòd bhon eisimpleir
Anns an artaigil seo tha sinn a 'toirt iomradh , far a bheil na APIan Spring and MicroProfile agus eadhon an aon chlas Java air an cleachdadh còmhla. Faodar an còd san eisimpleir seo a chur ri chèile agus a ruith bhon loidhne-à ithne, faic am faidhle README.md airson mion-fhiosrachadh.
APIs Spring Framework
Injection eisimeileachd
Tha Quarkus aâ toirt taic do raon de agus APIan In-stealladh eisimeileachd an Earraich (Earrach DI). Ma tha thu ag obair le MicroProfile, , an uairsin tha thu gu math eòlach air CDI mu thrĂ th. Air an lĂ imh eile, faodaidh luchd-leasachaidh an Earraich an Quarkus Extension airson Spring DI API a chleachdadh gus co-chòrdalachd le Spring DI a choileanadh. Tha eisimpleirean de bhith aâ cleachdadh na APIan Spring DI le taic air an toirt seachad ann an ClĂ r 2.
Đ Aâ cleachdadh an dĂ chuid CDI agus Spring Dependency Injection. Gheibhear tuilleadh fiosrachaidh agus eisimpleirean air aâ chuspair seo anns an stiĂšireadh Quarkus ris an canar .
ClĂ r 2. Eisimpleirean de bhith a 'cleachdadh APIan Spring DI le taic.
Feartan DI Spring le taic
eisimpleirean
In-stealladh constructor
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
In-stealladh achaidh
@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;
}
}
Am frèam lÏn
Is toil le luchd-cleachdaidh MicroProfile gu bheil Quarkus aâ toirt taic do JAX-RS, MicroProfile Rest Client, JSON-P, agus JSON-B mar am prĂŹomh mhodail prògramadh lĂŹn. Bidh luchd-leasachaidh an earraich toilichte le taic Quarkus o chionn ghoirid airson Spring Web API, gu sònraichte eadar-aghaidh REST. Coltach ri Spring DI, is e prĂŹomh amas taic Spring Web API leigeil le luchd-leasachaidh Spring Web APIs a chleachdadh ann an co-bhonn ri MicroProfile APIs. Tha eisimpleirean air mar a chleachdas tu na APIan Spring Web le taic rim faighinn ann an ClĂ r 3, agus gheibhear tuilleadh fiosrachaidh agus eisimpleirean air aâ chuspair seo anns an oideachadh Quarkus ris an canar .
ClĂ r 3. Eisimpleirean de bhith a' cleachdadh APIan Spring Web le taic.
Feartan lĂŹn Earrach le taic
eisimpleirean
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@Iarrtas Param
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@LĂ mhair eisgeachd
@RestControllerAdvice (pĂ irt)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
DĂ ta an Earraich JPA
Tuigidh luchd-cleachdaidh MicroProfile cuideachd gu bheil Quarkus aâ toirt taic do JPA aâ cleachdadh an Hibernate ORM. Tha deagh naidheachd ann cuideachd do luchd-leasachaidh an Earraich: tha Quarkus aâ toirt taic do notaichean agus seòrsachan cumanta Spring Data JPA. Tha eisimpleirean de bhith aâ cleachdadh na APIan Spring Data JPA le taic air an toirt seachad ann an ClĂ r 4.
Đ Thathas aâ cleachdadh APIan Spring Data JPA agus tha tuilleadh fiosrachaidh ri fhaighinn anns an oideachadh Quarkus ris an canar .
ClĂ r 4. Eisimpleirean de bhith a' cleachdadh APIan JPA Data Spring le taic.
Feartan JPA DĂ ta Earrach le taic
eisimpleirean
Stòr-tasgaidh Crud
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Stòrlann
JpaRepository
Stòras PagingAndSorting
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragannan tasgaidh
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Modhan ceist stèidhichte
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Ceistean air an sònrachadh leis an neach-cleachdaidh
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);
}
APIan MicroProfile
Fulangas sgĂ inidh
Tha togail fulangas sgĂ inidhean glè chudromach airson casg a chuir air fĂ illigeadh casg agus cruthachadh ailtireachd microservice earbsach. Tha luchd-leasachaidh an earraich air a bhith aâ cleachdadh luchd-brisidh airson fulangas sgĂ inidhean airson grunn bhliadhnaichean. . Ach, chan eil Hystrix air Ăšrachadh airson Ăšine mhòr, ach tha MicroProfile's Fault Tolerance a-nis a 'leasachadh gu gnĂŹomhach agus tha grunn bhliadhnaichean de chleachdadh riochdachaidh air a chĂšlaibh. Mar sin, gus earbsachd sheirbheisean ann an Quarkus a leasachadh, thathas aâ moladh na APIan MicroProfile Fault Tolerance a chleachdadh, agus tha eisimpleirean dhiubh sin air an cleachdadh ann an ClĂ r 5. Airson tuilleadh fiosrachaidh mu dheidhinn seo, faic leabhar-lĂ imhe Quarkus .
ClĂ r 5. Eisimpleirean de bhith aâ cleachdadh APIan MicroProfile Fault Tolerance le taic.
Feartan fulangas sgĂ ineadh MicroProfile
Tuairisgeul
eisimpleirean
@asyncronach
Cur an gnĂŹomh loidsig ann an snĂ ithlean fa leth
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Cuir crĂŹoch air an Ă ireamh de dh'iarrtasan aig an aon Ă m
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
LĂ imhseachadh fĂ illigeadh glic agus faighinn seachad air fĂ illigidhean
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Tuiteam air ais
A 'gairm loidsig eile ma dh'fhĂ illigeas
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Feuch a-rithist ma dhâ fhĂ illig iarrtas
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ăine smachd air dĂŹth
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Seirbheisean sgrĂšdaidh (Seirbheis SlĂ inte)
Bidh Ă rd-Ăšrlaran Kubernetes aâ cumail sĂšil air slĂ inte shoithichean aâ cleachdadh seirbheisean sònraichte. Gus leigeil leis an Ă rd-Ăšrlar bunaiteach sĂšil a chumail air seirbheisean, mar as trice bidh luchd-leasachaidh an Earraich aâ cleachdadh HealthIndicator Ă bhaisteach agus Spring Boot Actuator. Ann an Quarkus, faodar seo a dhèanamh le bhith aâ cleachdadh MicroProfile Health, a bhios gu gnĂ thach aâ dèanamh sgrĂšdadh beòthalachd, ach faodar a rèiteachadh gus sĂšil a thoirt air beòthalachd agus deisealachd aig an aon Ă m. Tha eisimpleirean de mar a chleachdas tu na APIan MicroProfile Health le taic rim faighinn ann an ClĂ r 6, agus tha fiosrachadh a bharrachd air a thoirt seachad ann an leabhar-lĂ imhe Quarkus .
ClĂ r 6: Eisimpleirean cleachdaidh de APIan MicroProfile Health le taic.
Feartan slĂ inte MicroProfile
Tuairisgeul
eisimpleirean
@beòthalachd
Bidh an Ă rd-Ăšrlar ag ath-thòiseachadh thagraidhean soithich a dhâ fhĂ illig
Ceann-uidhe:
aoigheachd: 8080 / slà inte / beò
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@readness
Cha chuir an Ă rd-Ăšrlar trafaic gu tagraidhean gleidhidh mura h-eil e deiseil
Ceann-uidhe:
aoigheachd: 8080 / slĂ inte / deiseil
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Meatrics
Bidh tagraidhean aâ toirt seachad meatrach airson adhbharan obrachaidh (gus sĂšil a chumail air SLAn dèanadais) no adhbharan neo-ghnĂŹomhach (SLAn gnĂŹomhachais). Bidh luchd-leasachaidh an earraich aâ toirt seachad meatrach aâ cleachdadh Spring Boot Actuator agus Micrometer. An uair sin, bidh Quarkus aâ cleachdadh MicroProfile Metrics gus meatrach bun-loidhne (JVM agus siostam obrachaidh), metrics reiceadair (Quarkus), agus metrics tagraidh a thoirt seachad. Tha MicroProfile Metrics ag iarraidh gum bi am buileachadh aâ toirt taic do chruthan toraidh JSON agus OpenMetrics (Prometheus). Tha eisimpleirean de bhith aâ cleachdadh an MicroProfile Metrics API air an toirt seachad ann an ClĂ r 7.
Đ Bithear aâ cleachdadh MicroProfile Metrics gus metrics tagraidh a thoirt seachad. Airson tuilleadh fiosrachaidh, faic leabhar-lĂ imhe Quarkus .
ClĂ r 7. Eisimpleirean de bhith a 'cleachdadh MicroProfile Metrics APIs.
Feartan MicroProfile Metrics
Tuairisgeul
eisimpleirean
@Cunntadh
Aâ comharrachadh cuntair a tha aâ cunntadh na h-uimhir de thursan a chaidh rud le notaichean a ghairm
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Aâ comharrachadh slat-tomhais a tha aâ cunntadh an Ă ireamh de ghlaodhan co-aontach gu nĂŹ le notaichean
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gabhadh
Aâ comharrachadh sensor tomhais a bhios aâ tomhas luach nĂŹ le notaichean
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@meadhanach
Aâ comharrachadh sensor meatair a bhios aâ cumail sĂšil air tricead gairm nĂŹ le notaichean
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nota anns a bheil fiosrachadh mu mheata-dĂ ta nuair a gheibhear iarrtas airson meatrach a chur a-steach no a thoirt gu buil
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Aâ comharrachadh timer a bhios aâ cumail sĂšil air fad nĂŹ le notaichean
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Puingean crĂŹochnachaidh metrics
Meudan tagraidh :8080/metrics/tagradh
Meudan bunaiteach :8080/metrics/bonn
Meatairean reiceadair :8080/metrics/reiceadair
A h-uile metrics :8080 / meatrach
Neach-dèiligidh Rest MicroProfile
Bidh microservices gu tric aâ toirt seachad puingean crĂŹochnachaidh RESTful a dhâ fheumas APIan teachdaiche co-fhreagarrach obrachadh leotha. Gus puingean crĂŹochnachaidh RESTful a chleachdadh, mar as trice bidh luchd-leasachaidh an earraich aâ cleachdadh RestTemplate. Bidh Quarkus aâ tabhann MicroProfile Rest Client APIs gus an duilgheadas seo fhuasgladh, agus tha eisimpleirean de chleachdadh air an toirt seachad ann an ClĂ r 8.
Đ tha cleachdadh puingean crĂŹochnachaidh RESTful air a dhèanamh aâ cleachdadh an MicroProfile Rest Client. Gheibhear tuilleadh fiosrachaidh agus eisimpleirean air aâ chuspair seo ann an leabhar-lĂ imhe Quarkus .
ClĂ r 8. Eisimpleirean de bhith a 'cleachdadh MicroProfile Rest Client APIs.
Feartan neach-dèiligidh MicroProfile Rest
Tuairisgeul
eisimpleirean
@RegisterRestClient
Aâ clĂ radh eadar-aghaidh clò-sgrĂŹobhte Java mar neach-dèiligidh REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Aâ comharrachadh buileachadh eisimpleir de eadar-aghaidh teachdaiche REST clò-bhuailte
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Gabhail a-steach
Aâ gairm puing crĂŹochnachaidh REST
System.out.println(
restClient.getSalutation());
mp-fois/url
Sònraich puing crÏochnachaidh REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Builean
Anns aâ bhlog seo, ag amas gu sònraichte air luchd-leasachaidh an Earraich, thug sinn sĂšil aithghearr air mar a chleachdas sinn Spring APIs leis na MicroProfile APIs ann an Quarkus gus microservices Java a leasachadh agus an uairsin gan cur ri chèile ann an còd binary dĂšthchasach a shĂ bhalas ceudan de mhegabytes de RAM agus a chuir air bhog a-steach. cĂšis milliseconds.
Mar a thuig thu mu thrà th, gheibhear barrachd fiosrachaidh mu thaic airson API Spring and MicroProfile, a bharrachd air tòrr fiosrachaidh feumail eile, ann an .
Source: www.habr.com
