Jambo kila mtu, hapa kuna chapisho la tatu katika mfululizo wa Quarkus!
Wakati wa kuendeleza huduma ndogo za Java, mara nyingi huaminika hivyo
Kwa undani zaidi, kwanza tutaangalia upeo na maelezo ya jinsi Quarkus inavyotumia API za Spring ili kuonyesha wasanidi wa Spring jinsi ya kutumia API ya MicroProfile katika kazi zao za kila siku. Kisha, tutaanzisha API za MicroProfile, ambazo ni muhimu kwa watengenezaji wa Spring wakati wa kuunda huduma ndogo.
Kwa nini Quarkus? Kwanza, hii ni kuweka coding moja kwa moja, ambayo ni, upakiaji otomatiki wa mabadiliko yoyote katika API ya MicroProfile, API ya Spring na API zingine za Java, ambayo hufanywa kwa amri moja tu: mvn quarkus:dev. Pili, kuzingatiwa katika
Hatutaeleza kwa undani kuhusu MicroProfile, zaidi ya kuwasaidia wasanidi wa Spring kuelewa jinsi wanavyoweza kutumia API za Spring na API za MicroProfile katika Quarkus.
Vyombo na Kubernetes
Ili kufanya makala haya kuwa rahisi, tutashughulikia vipengele vya usaidizi wa hali ya juu hapa.
Quarcus pia
Hatimaye, kwa kuzingatia Kubernetes kama mazingira lengwa ya utumiaji, Quarkus haitumii mifumo ya Java katika hali ambapo utendakazi sawa unatekelezwa katika kiwango cha jukwaa la Kubernetes lenyewe. Jedwali la 1 linatoa ramani ya mawasiliano ya kiutendaji kati ya Kubernetes na mifumo ya kawaida ya Java inayotumiwa na wasanidi wa Spring.
Jedwali 1. Ramani ya mawasiliano ya kazi kati ya mifumo ya Java na Kubernetes.
Kazi
Boot ya Jadi ya Spring
Mabernet
Ugunduzi wa huduma
Eureka
DNS
Configuration
Usanidi wa Wingu la Spring
Sanidi Ramani/Siri
Mzigo wa kupakia
Utepe (upande wa mteja)
Huduma, Kidhibiti cha Kurudiarudia (upande wa seva)
Kukusanya na kuendesha msimbo kutoka kwa mfano
Katika makala hii tunarejelea
API za Mfumo wa Spring
Sindano ya Kutegemea
Quarkus inasaidia anuwai ya
Π
Jedwali la 2. Mifano ya kutumia API za Spring DI zinazotumika.
Vipengele vinavyotumika vya Spring DI
mifano
Sindano ya Wajenzi
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Sindano ya shamba
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Usanidi
@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;
}
}
Mfumo wa wavuti
Watumiaji wa MicroProfile watapenda kwamba Quarkus inasaidia JAX-RS, MicroProfile Rest Client, JSON-P, na JSON-B kama kielelezo cha msingi cha programu ya wavuti. Wasanidi wa chemchemi watafurahishwa na usaidizi wa hivi majuzi wa Quarkus kwa API ya Wavuti ya Spring, haswa violesura vya REST. Sawa na Spring DI, lengo kuu la usaidizi wa API ya Spring Web ni kuwawezesha wasanidi wa Spring kutumia API za Spring Web kwa kushirikiana na API za MicroProfile. Mifano ya jinsi ya kutumia API za Spring Web zinazotumika imetolewa katika Jedwali la 3, na maelezo zaidi na mifano kuhusu mada hii inaweza kupatikana katika mafunzo ya Quarkus yanayoitwa.
Jedwali la 3. Mifano ya kutumia API za Wavuti za Spring zinazotumika.
Vipengele vya Wavuti vya Spring vinavyotumika
mifano
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (sehemu)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Data ya Spring JPA
Watumiaji wa MicroProfile pia watathamini kwamba Quarkus inasaidia JPA kwa kutumia Hibernate ORM. Pia kuna habari njema kwa wasanidi wa Spring: Quarkus hutumia maelezo na aina za kawaida za Data ya Spring ya JPA. Mifano ya kutumia API za JPA Data ya Spring inayotumika imetolewa katika Jedwali la 4.
Π
Jedwali la 4. Mifano ya kutumia API za JPA za Data ya Spring zinazotumika.
Vipengele vya JPA vya Data ya Spring vinavyotumika
mifano
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Vipande vya Hifadhi
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Njia za kuuliza zinazotokana
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Maswali yaliyofafanuliwa na mtumiaji
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);
}
API za Wasifu Ndogo
Uvumilivu wa makosa
Uundaji wa uvumilivu wa makosa ni muhimu sana kwa kuzuia kushindwa kwa kasi na kuunda usanifu wa kuaminika wa huduma ndogo. Watengenezaji wa spring wamekuwa wakitumia vivunja mzunguko kwa uvumilivu wa makosa kwa miaka mingi.
Jedwali la 5. Mifano ya kutumia API za Kuvumilia Hitilafu za MicroProfile zinazotumika.
Vipengele vya Kuvumilia Kosa la MicroProfile
Description
mifano
@Asynchronous
Utekelezaji wa mantiki katika uzi tofauti
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Kupunguza idadi ya maombi ya wakati mmoja
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Utunzaji wa kushindwa kwa busara na urejeshaji kutoka kwa kushindwa
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Kuanguka nyuma
Kuita mantiki mbadala katika kesi ya kushindwa
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Jaribu tena kwa kushindwa kwa ombi
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Udhibiti wa kushindwa kuisha
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Huduma za ukaguzi (Afya ya Huduma)
Majukwaa ya Kubernetes hufuatilia afya ya vyombo kwa kutumia huduma maalum. Ili kuruhusu jukwaa la msingi kufuatilia huduma, wasanidi wa Spring kwa kawaida hutumia Kiashiria maalum cha Afya na Kiwezeshaji Boot cha Spring. Katika Quarkus, hii inaweza kufanywa kwa kutumia MicroProfile Health, ambayo kwa chaguo-msingi hufanya ukaguzi wa uhai, lakini inaweza kusanidiwa ili kuangalia wakati huo huo uhai na utayarifu. Mifano ya jinsi ya kutumia API za Afya za MicroProfile zinazotumika imetolewa katika Jedwali la 6, na maelezo ya ziada yametolewa katika mwongozo wa Quarkus.
Jedwali la 6: Mifano ya matumizi ya API za Afya za MicroProfile zinazotumika.
Vipengele vya Afya ya MicroProfile
Description
mifano
@Maisha
Mfumo huwasha upya programu zilizo na kontena zilizoshindwa
Mwisho:
mwenyeji:8080/afya/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Tayari
Mfumo hautatuma trafiki kwa programu zilizo na kontena ikiwa haiko tayari
Mwisho:
mwenyeji:8080/afya/tayari
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Vipimo
Programu hutoa vipimo kwa madhumuni ya uendeshaji (kufuatilia SLA za utendaji) au madhumuni yasiyo ya uendeshaji (SLA za biashara). Wasanidi wa chemchemi hutoa vipimo kwa kutumia Spring Boot Actuator na Micrometer. Kwa upande wake, Quarkus hutumia Metrics ya MicroProfile kutoa vipimo vya msingi (JVM na mfumo wa uendeshaji), vipimo vya wachuuzi (Quarkus), na vipimo vya programu. Metrics ya MicroProfile inahitaji kwamba utekelezaji utumie miundo ya kutoa ya JSON na OpenMetrics (Prometheus). Mifano ya kutumia API ya Vipimo vya Wasifu Midogo imetolewa katika Jedwali la 7.
Π
Jedwali la 7. Mifano ya kutumia API za Metrics za MicroProfile.
Vipengele vya Vipimo vya Wasifu Ndogo
Description
mifano
@Imehesabiwa
Inaashiria kaunta ambayo huhesabu idadi ya mara ambazo kitu kilichofafanuliwa kimeitwa
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Inaashiria kipimo ambacho huhesabu idadi ya simu zinazofanana kwa kitu kilichofafanuliwa
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Kipimo
Inaashiria kihisi cha kupima ambacho hupima thamani ya kitu kilichofafanuliwa
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Inaashiria kihisi cha mita kinachofuatilia marudio ya simu ya kitu kilichofafanuliwa
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Kidokezo kilicho na maelezo kuhusu metadata wakati ombi la kuingiza au kutoa kipimo kinapopokelewa
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Huonyesha kipima muda kinachofuatilia muda wa kitu kilichofafanuliwa
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Vipimo vya Mwisho vya Metrics
Vipimo vya maombi
Vipimo vya msingi
Vipimo vya muuzaji
Vipimo vyote
MicroProfile Rest Mteja
Huduma ndogo mara nyingi hutoa vidokezo RESTful ambavyo vinahitaji API za mteja zinazolingana kufanya kazi nazo. Ili kutumia vidokezo vya RESTful, wasanidi wa Spring kwa kawaida hutumia RestTemplate. Quarkus inatoa MicroProfile Rest Client APIs kutatua tatizo hili, mifano ya matumizi ambayo imetolewa katika Jedwali 8.
Π
Jedwali 8. Mifano ya kutumia MicroProfile Rest Client APIs.
Vipengele vya Mteja wa Kupumzika kwa MicroProfile
Description
mifano
@RegisterRestClient
Husajili kiolesura cha Java kilichochapwa kama kiteja cha REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Huashiria utekelezaji wa mfano wa kiolesura cha mteja cha REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Kuomba
Inapigia simu kituo cha REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Hubainisha sehemu ya mwisho ya REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Matokeo ya
Katika blogu hii, inayolenga hasa watengenezaji wa Spring, tuliangalia kwa haraka jinsi ya kutumia API za Spring na API za MicroProfile katika Quarkus ili kuunda huduma ndogo za Java na kisha kuzikusanya katika msimbo wa binary asili ambao huhifadhi mamia ya megabytes ya RAM na kuzinduliwa. suala la milliseconds.
Kama ulivyoelewa tayari, maelezo zaidi kuhusu usaidizi wa API za Spring na MicroProfile, pamoja na maelezo mengine mengi muhimu, yanaweza kupatikana katika
Chanzo: mapenzi.com