Sanibonani nonke, nali iposi lesithathu ochungechungeni lwe-Quarkus!
Lapho uthuthukisa ama-microservices e-Java, kuvame ukukholelwa ukuthi
Ngemininingwane eyengeziwe, sizoqala sibheke ububanzi nemininingwane yokuthi i-Quarkus iwasekela kanjani ama-Spring API ukuze abonise abathuthukisi baseNtwasahlobo ukuthi bangayisebenzisa kanjani i-MicroProfile API emsebenzini wabo wansuku zonke. Bese sizofaka i-MicroProfile APIs, ewusizo konjiniyela baseNtwasahlobo lapho benza ama-microservices.
Kungani i-Quarkus? Okokuqala, lokhu ukubhala ikhodi bukhoma, okungukuthi, ukulayisha kabusha okuzenzakalelayo kwanoma yiziphi izinguquko ku-MicroProfile API, i-Spring API namanye ama-Java API, okwenziwa ngomyalo owodwa nje: mvn quarkus:dev. Okwesibili, kuxoxwe ku
Ngeke singene emininingwaneni mayelana ne-MicroProfile, ngaphandle kokusiza onjiniyela baseNtwasahlobo baqonde ukuthi bangasebenzisa kanjani ama-Spring API nge-MicroProfile APIs ku-Quarkus.
Iziqukathi kanye Kubernetes
Ukuze ugcine lesi sihloko silula, sizofaka kuphela izici ezisezingeni eliphezulu zosekelo lapha.
Quarks futhi
Okokugcina, ngokugxila ku-Kubernetes njengendawo yokuthunyelwa okuhlosiwe, i-Quarkus ayisebenzisi izinhlaka ze-Java ezimeni lapho ukusebenza okufanayo kusetshenziswa khona ezingeni le-Kubernetes platform ngokwayo. Ithebula 1 linikeza imephu yokuxhumana okusebenzayo phakathi kwe-Kubernetes nezinhlaka ezijwayelekile ze-Java ezisetshenziswa abathuthukisi baseNtwasahlobo.
Ithebula 1. Imephu yokuxhumana okusebenzayo phakathi kwezinhlaka ze-Java kanye ne-Kubernetes.
Ukusebenza
I-Traditional Spring Boot
Kubernetes
Ukutholwa kwesevisi
Eureka
DNS
Ukucushwa
I-Spring Cloud Config
Lungiselela Amamephu/Izimfihlo
Ukulayisha ngokulinganisa
Iribhoni (uhlangothi lweklayenti)
Isevisi, Isilawuli sokuphindaphinda (uhlangothi lweseva)
Ukuhlanganisa nokusebenzisa ikhodi kusuka kusibonelo
Kulesi sihloko sibhekisela kuso
Spring Framework APIs
Umjovo Wokuncika
I-Quarkus isekela ububanzi be
Π
Ithebula 2. Izibonelo zokusebenzisa ama-Spring DI API asekelwe.
Izici ze-Spring DI ezisekelwe
Izibonelo
Umjovo Wokwakha
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Umjovo Wensimu
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Ukucushwa
@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;
}
}
Uhlaka lwewebhu
Abasebenzisi be-MicroProfile bazothanda ukuthi i-Quarkus isekela i-JAX-RS, i-MicroProfile Rest Client, i-JSON-P, ne-JSON-B njengemodeli eyinhloko yohlelo lwewebhu. Abathuthukisi basentwasahlobo bazojabula ngokusekela kwakamuva kuka-Quarkus kwe-Spring Web API, ikakhulukazi i-REST interface. Ngokufanayo ne-Spring DI, umgomo oyinhloko wosekelo lwe-Spring Web API ukunika amandla abathuthukisi beNtwasahlobo ukuthi basebenzise ama-API Wewebhu Yasentwasahlobo ngokuhlangana nama-MicroProfile API. Izibonelo zendlela yokusebenzisa i-Spring Web APIs esekelwe inikezwe kuThebula 3, futhi ulwazi olwengeziwe nezibonelo ngalesi sihloko zingatholakala esifundweni se-Quarkus esibizwa ngokuthi.
Ithebula 3. Izibonelo zokusebenzisa ama-Spring Web API asekelwe.
Izici Zewebhu Zentwasahlobo ezisekelwe
Izibonelo
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (ingxenye)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
I-Spring Data JPA
Abasebenzisi be-MicroProfile bazophinde bajabulele ukuthi i-Quarkus isekela i-JPA isebenzisa i-Hibernate ORM. Kukhona futhi izindaba ezinhle zonjiniyela baseNtwasahlobo: I-Quarkus isekela izichasiselo nezinhlobo ze-Spring Data JPA. Izibonelo zokusebenzisa ama-API we-Spring Data JPA API zinikezwe kuThebula 4.
Π
Ithebula 4. Izibonelo zokusebenzisa ama-API we-Spring Data JPA API.
Izici ezisekelwe ze-Spring Data JPA
Izibonelo
I-CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Igumbi
I-JpaRepository
I-PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Izingcezu Zenqolobane
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Izindlela 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);
}
I-MicroProfile APIs
Ukubekezelela amaphutha
Izakhiwo zokubekezelela amaphutha zibaluleke kakhulu ekuvimbeleni ukuhluleka kwe-cascading nokudala izakhiwo ezinokwethenjelwa ze-microservice. Abathuthukisi basentwasahlobo bebelokhu besebenzisa ama-circuit-breaker ukubekezelela amaphutha iminyaka eminingi.
Ithebula 5. Izibonelo zokusebenzisa i-MicroProfile Fault Tolerance APIs esekelwayo.
Izici ze-MicroProfile Fault Tolerance
Incazelo
Izibonelo
@Asynchronous
Isebenzisa i-logic kuchungechunge oluhlukile
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Khawulela inani lezicelo kanyekanye
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@I-circuit breaker
Ukuphatha ukwehluleka okuhlakaniphile nokubuyiselwa ekuhlulekeni
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Ozowela kuyo
Ukushayela enye indlela enengqondo uma yehluleka
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Zama futhi ekuhlulekeni kwesicelo
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ukuhluleka ukulawula isikhathi sokuvala
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Ukuhlola amasevisi (Impilo Yesevisi)
Amapulatifomu e-Kubernetes aqapha impilo yeziqukathi zisebenzisa izinsizakalo ezikhethekile. Ukuvumela inkundla eyisisekelo ukuthi igade izinsizakalo, onjiniyela baseNtwasahlobo basebenzisa i-HealthIndicator yangokwezifiso kanye ne-Spring Boot Actuator. Ku-Quarkus, lokhu kungenziwa kusetshenziswa i-MicroProfile Health, okuthi ngokuzenzakalelayo ihlole ukuthi iyasebenza yini, kodwa ingalungiselelwa ngesikhathi esisodwa ukuhlola ukuphila nokulungela. Izibonelo zendlela yokusebenzisa i-MicroProfile Health APIs esekelwe inikezwe kuThebula 6, futhi ulwazi olwengeziwe lunikezwe kumanuwali we-Quarkus.
Ithebula 6: Izibonelo zokusetshenziswa kwama-API wezempilo we-MicroProfile asekelwe.
Izici Zezempilo ze-MicroProfile
Incazelo
Izibonelo
@Liveness
Inkundla iqalisa kabusha izinhlelo zokusebenza ezifakwe iziqukathi ezihlulekile
Iphoyinti lokugcina:
umphathi: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
Inkundla ngeke ithumele ithrafikhi kuzicelo ezifakwe emabhokisini uma ingakalungi
Iphoyinti lokugcina:
umphathi:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Amamethrikhi
Izicelo zihlinzeka ngamamethrikhi ngokwezinjongo zokusebenza (ukwengamela ukusebenza kwama-SLA) noma izinjongo ezingezona ezokusebenza (ama-SLA ebhizinisi). Onjiniyela basentwasahlobo bahlinzeka ngamamethrikhi basebenzisa i-Spring Boot Actuator ne-Micrometer. Ngokulandelayo, i-Quarkus isebenzisa i-MicroProfile Metrics ukuze inikeze amamethrikhi ayisisekelo (i-JVM nesistimu yokusebenza), amamethrikhi omthengisi (i-Quarkus), namamethrikhi ohlelo lokusebenza. I-MicroProfile Metrics idinga ukuthi ukusetshenziswa kusekele amafomethi okukhiphayo e-JSON kanye ne-OpenMetrics (Prometheus). Izibonelo zokusebenzisa i-MicroProfile Metrics API zinikezwe kuThebula 7.
Π
Ithebula 7. Izibonelo zokusebenzisa i-MicroProfile Metrics APIs.
Izici ze-MicroProfile Metrics
Incazelo
Izibonelo
@Ibaliwe
Kuchaza ikhawunta yokubala ebala izikhathi lapho into enezichasiselo ibizwe ngayo
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Isho igeji ebala inani lamakholi ahambisanayo ento enezichasiselo
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gage
Isho inzwa ye-gauge ekala inani lento echazwe
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Isho inzwa yemitha eqapha ukuvama kwezingcingo zento enezichasiselo
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Isichasiselo esiqukethe ulwazi mayelana nemethadatha uma isicelo samukelwe sokufaka noma ukukhiqiza imethrikhi
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Ibonisa isibali-sikhathi esilandelela ubude besikhathi bento enezichasiselo
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Ama-Metrics Endpoints
Amamethrikhi ohlelo lokusebenza
Amamethrikhi ayisisekelo
Amamethrikhi omthengisi
Wonke amamethrikhi
I-MicroProfile Rest Client
Ama-Microservices ngokuvamile ahlinzeka ngamaphoyinti okuphela angu-RESTful adinga ama-API weklayenti ahambisanayo ukusebenza nawo. Ukuze usebenzise amaphoyinti okugcina angu-RESTful, onjiniyela base-Spring bavamise ukusebenzisa i-RestTemplate. I-Quarkus inikeza i-MicroProfile Rest Client APIs ukuxazulula le nkinga, izibonelo zokusebenzisa ezinikezwe kuThebula lesi-8.
Π
Ithebula 8. Izibonelo zokusebenzisa i-MicroProfile Rest Client APIs.
Izici Zeklayenti Zokuphumula ze-MicroProfile
Incazelo
Izibonelo
@RegisterRestClient
Ibhalisa isixhumi esibonakalayo se-Java esithayiphiwe njengeklayenti le-REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Imaka ukuqaliswa kwesibonelo sokusetshenziswa kubonwa kweklayenti okuthayiphiwe kwe-REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Ukucela
Ishayela indawo yokugcina ye-REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Icacisa indawo yokugcina ye-REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Imiphumela
Kule bhulogi, okuhloswe ngayo ikakhulukazi onjiniyela baseNtwasahlobo, sibheke ngokushesha ukuthi isetshenziswa kanjani i-Spring APIs nama-MicroProfile APIs e-Quarkus ukuze kuthuthukiswe ama-microservices e-Java bese siwahlanganisa abe ikhodi kanambambili yomdabu elondoloza amakhulukhulu amamegabhayithi e-RAM futhi iqalise ngo indaba yama-millisecond.
Njengoba usuzwile kakade, ulwazi olwengeziwe mayelana nokusekelwa kwe-Spring and MicroProfile APIs, kanye nolunye ulwazi oluningi oluwusizo, lungatholakala ku-
Source: www.habr.com