Molweni nonke, nantsi isithuba sesithathu kuthotho lweQuarkus!
Xa uphuhlisa ii-microservices zeJava, kuhlala kukholelwa ukuba
Kwinkcukacha ezithe vetshe, siza kuqala sijonge umda kunye neenkcukacha zendlela iQuarkus exhasa ngayo iSpring APIs ukubonisa abaphuhlisi baseNtwasahlobo indlela yokusebenzisa iMicroProfile API kumsebenzi wabo wemihla ngemihla. Emva koko siza kugubungela i-MicroProfile APIs, eziluncedo kubaphuhlisi baseNtwasahlobo xa besenza ii-microservices.
Kutheni iQuarkus? Okokuqala, le yikhowudi ephilayo, oko kukuthi, ukulayishwa kwakhona ngokuzenzekelayo naluphi na utshintsho kwi-MicroProfile API, i-Spring API kunye nezinye i-Java APIs, eyenziwa ngomyalelo omnye kuphela: mvn quarkus:dev. Okwesibini, kuqwalaselwa kwi
Asiyi kungena kwiinkcukacha malunga ne-MicroProfile, ngaphandle kokunceda abaphuhlisi be-Spring baqonde indlela abanokusebenzisa ngayo i-Spring APIs kunye ne-MicroProfile APIs kwi-Quarkus.
Izikhongozeli kunye neKubernetes
Ukugcina eli nqaku lilula, siza kugubungela kuphela imiba ekwinqanaba eliphezulu lenkxaso apha.
I-Quarcus nayo
Ekugqibeleni, ngokugxila kwi-Kubernetes njengendawo ekujoliswe kuyo, i-Quarkus ayisebenzisi izikhokelo zeJava kwiimeko apho ukusebenza okufanayo kuphunyezwa kwinqanaba le-platform ye-Kubernetes ngokwayo. Itheyibhile 1 ibonelela ngemephu yembalelwano esebenzayo phakathi kweKubernetes kunye nesakhelo esiqhelekileyo seJava esisetyenziswe ngabaphuhlisi baseNtwasahlobo.
Itheyibhile 1. Imephu yembalelwano esebenzayo phakathi kwesakhelo seJava kunye neKubernetes.
Iyasebenza
Isihlangu seNtwasahlobo seNdabuko
Kubernetes
Ukufunyanwa kwenkonzo
Eureka
DNS
uqwalaselo
iSpring Cloud Config
Qwalasela iimephu/iiMfihlo
Ukulayisha ukulayisha
Iribhoni (icala lomxumi)
Inkonzo, isiLawuli sokuphindaphinda (icala leseva)
Ukuqulunqa nokusebenzisa ikhowudi kumzekelo
Kweli nqaku sibhekisela kuyo
Spring Framework APIs
Inaliti yokuxhomekeka
I-Quarkus ixhasa uluhlu lwe
Π
Uluhlu 2. Imizekelo yokusebenzisa iSpring DI APIs ezixhaswayo.
Inkxaso yeNtwasahlobo DI Iimpawu
U mzekelo
Isitofu soMakhi
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Isitofu sangaphandle
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Uqwalaselo
@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;
}
}
Isakhelo sewebhu
Abasebenzisi be-MicroProfile baya kuthanda ukuba i-Quarkus ixhasa i-JAX-RS, i-MicroProfile Rest Client, i-JSON-P, kunye ne-JSON-B njengemodeli ephambili yeprogram yewebhu. Abaphuhlisi baseNtwasahlobo baya konwatyiswa yinkxaso yakutshanje yeQuarkus ye-Spring Web API, ngokukodwa ujongano lwe-REST. Ngokufana ne-Spring DI, eyona njongo iphambili yenkxaso ye-Spring Web API kukwenza abaphuhlisi be-Spring basebenzise i-Spring Web APIs ngokubambisana ne-MicroProfile APIs. Imizekelo yendlela yokusebenzisa iSpring Web APIs exhaswayo inikwe kwiThebhile 3, kunye nolwazi oluninzi kunye nemizekelo yesi sihloko inokufumaneka kwisifundo seQuarkus esibizwa ngokuba
Itheyibhile 3. Imizekelo yokusebenzisa iSpring Web APIs exhaswayo.
Iimpawu zeWebhu ezixhaswayo
U mzekelo
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (inxalenye)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Idatha yaseNtwasahlobo yeJPA
Abasebenzisi beMicroProfile baya kuxabisa kwakhona ukuba iQuarkus ixhasa iJPA isebenzisa iHibernate ORM. Kukwakho neendaba ezimnandi kubaphuhlisi baseNtwasahlobo: I-Quarkus ixhasa i-Spring Data JPA amanqakwana kunye neentlobo. Imizekelo yokusebenzisa iSpring Data JPA APIs inikwe kwiThebhile 4.
Π
Itheyibhile 4. Imizekelo yokusebenzisa iSpring Data JPA APIs.
INkxaso yeDatha yaseNtwasahlobo yeJPA Iimpawu
U mzekelo
I-CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
IPagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Iziqwenga zokugcina
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Iindlela zokubuza imibuzo
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Imibuzo echazwe ngumsebenzisi
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 APIs
Ukunyamezela iimpazamo
Ulwakhiwo lokunyamezela impazamo lubaluleke kakhulu ekuthinteleni ukungaphumeleli kwe-cascading kunye nokudala i-architectures ethembekileyo ye-microservice. Abaphuhlisi be-Spring basebenzise i-circuit-breakers ukunyamezela impazamo iminyaka emininzi.
Itheyibhile 5. Imizekelo yokusebenzisa i-APIs ye-MicroProfile Fault Tolerance exhaswayo.
Iimpawu zoNyamezelo lweFault MicroProfile
inkcazelo
U mzekelo
@Asynchronous
Ukwenza ingqiqo kumsonto owahlukileyo
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Ukunciphisa inani lezicelo ngaxeshanye
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Umephuli wojikelezo
Ukuphathwa kokungaphumeleli kwe-Smart kunye nokubuyisela kwiintsilelo
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Ubuyela kundalashe
Ukufowuna enye ingqiqo kwimeko yokusilela
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Phinda uzame ukusilela kwesicelo
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ukungaphumeleli ukulawula ixesha lokuvala
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Iinkonzo zokujonga (iNkonzo yezeMpilo)
Amaqonga e-Kubernetes abeka iliso kwimpilo yezikhongozeli ezisebenzisa iinkonzo ezizodwa. Ukuvumela iqonga elisisiseko ukuba libeke iliso kwiinkonzo, abaphuhlisi baseNtwasahlobo basebenzisa i-HealthIndicator yesiko kunye ne-Spring Boot Actuator. Kwi-Quarkus, oku kunokwenziwa ngokusebenzisa iMpilo ye-MicroProfile, ethi ngokungagqibekanga yenza isheke lokuphila, kodwa inokuthi iqwalaselwe ukuba ngaxeshanye ijonge ukuphila kunye nokulungela. Imizekelo yendlela yokusebenzisa i-APIs yeMpilo ye-MicroProfile exhaswayo inikwe kwiThebhile 6, kwaye ulwazi olongezelelweyo lunikezelwa kwi-Quarkus manual.
Itheyibhile 6: Imizekelo yokusetyenziswa kwee-APIs zeMpilo ye-MicroProfile exhaswayo.
Iimpawu zeMpilo yeMicroProfile
inkcazelo
U mzekelo
@Ukuphila
Iqonga liziqalela izicelo aziphumelelanga
Isiphelo:
umkhosi:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Ukulungela
Iqonga aliyi kuthumela itrafikhi kwizicelo ezifakwe kwikhonteyina ukuba ayilungile
Isiphelo:
umkhosi:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Iimetriki
Izicelo zibonelela ngeemetrics nokuba ziyasebenza (ukubeka iliso kwii-SLAs zokusebenza) okanye iinjongo ezingezizo ezokusebenza (ii-SLA zeshishini). Abaphuhlisi basentwasahlobo babonelela ngeemetrics besebenzisa iSpring Boot Actuator kunye neMicrometer. Ngaloo ndlela, i-Quarkus isebenzisa i-MicroProfile Metrics ukubonelela ngeemetriki zesiseko (i-JVM kunye nenkqubo yokusebenza), i-metrics yomthengisi (i-Quarkus), kunye ne-application metrics. I-MicroProfile Metrics ifuna ukuba ukuphunyezwa kuxhase i-JSON kunye ne-OpenMetrics (i-Prometheus) iifomathi zemveliso. Imizekelo yokusebenzisa i-MicroProfile Metrics API inikwe kwiThebhile 7.
Π
Itheyibhile 7. Imizekelo yokusebenzisa i-MicroProfile Metrics APIs.
Iimpawu zeMetrikhi zeMicroProfile
inkcazelo
U mzekelo
@Ibaliwe
Ichaza ikhawuntara ebala inani lamaxesha into enenkcazo ebizwa ngayo
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Ichaza igeyiji ebala inani lokufowuna ngaxeshanye ukuya kwinto enenkcazo
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Isilinganisi
Ibonisa i-gauge sensor elinganisa ixabiso lento echaziweyo
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Imitha
Ichaza isivamvo semitha esibeka iliso ngamaxesha okufowuna kwinto echaziweyo
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Inkcazo equlethe ulwazi malunga nemetadata xa isicelo sifunyenwe sokungena okanye ukuvelisa i-metric
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Ibonisa isibali-xesha esilandelela ubude bento echaziweyo
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Amanqaku okuphela kweeMetrics
Iimetriki zesicelo
Iimetriki ezisisiseko
Iimetriki zabathengisi
Zonke iimetrics
MicroProfile Rest Client
Ii-Microservices zihlala zibonelela ngeesiphelo ezi-RESTful ezifuna i-APIs yomxhasi ohambelanayo ukuze usebenze nayo. Ukusebenzisa i-RESTful endpoints, abaphuhlisi baseNtwasahlobo basebenzisa i-RestTemplate. I-Quarkus inikezela nge-MicroProfile Rest Client APIs ukusombulula le ngxaki, imizekelo yokusetyenziswa kwayo inikwe kwiThebhile 8.
Π
Itheyibhile 8. Imizekelo yokusebenzisa i-MicroProfile Rest Client APIs.
IMicroProfile yokuphumla koMxumi
inkcazelo
U mzekelo
@RegisterRestClient
Ibhalisa ujongano oluchwetheziweyo lweJava njengomthengi weREST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Iphawula ukuphunyezwa komzekelo wojongano lomxumi ochwetheziweyo REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Ukucela
Ifowunela isiphelo se-REST
System.out.println(
restClient.getSalutation());
mp-phumla/url
Ixela isiphelo se-REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Iziphumo
Kule bhlog, ejolise ikakhulu kubaphuhlisi baseNtwasahlobo, sithathe ujongo olukhawulezileyo kwindlela yokusebenzisa i-Spring APIs kunye neMicroProfile APIs kwiQuarkus ukuphuhlisa iimicroservices zeJava kwaye emva koko uzihlanganisele kwikhowudi yokubini yemveli egcina amakhulu eemegabytes ze-RAM kwaye iqalise ngaphakathi. umcimbi we-milliseconds.
Njengoko sele uqonda, ulwazi oluninzi malunga nenkxaso ye-Spring kunye ne-MicroProfile APIs, kunye nolunye ulwazi oluninzi oluluncedo, lunokufumaneka
umthombo: www.habr.com