Saluton al ĉiuj, jen la tria afiŝo de la serio Quarkus!
Dum evoluigado de Java mikroservoj, oni ofte kredas tion
Iom pli detale, ni unue rigardos la amplekson kaj detalojn pri kiel Quarkus subtenas Spring API-ojn por montri al Spring-programistoj kiel uzi la MicroProfile API en sia ĉiutaga laboro. Poste ni kovros la MicroProfile-APIojn, kiuj estas utilaj por Spring-programistoj dum kreado de mikroservoj.
Kial Quarkus? Unue, ĉi tio estas viva kodado, tio estas, aŭtomata reŝargado de iuj ŝanĝoj en la MicroProfile API, Spring API kaj aliaj Java API, kiu estas farita per nur unu komando: mvn quarkus:dev. Due, diskutite en
Ni ne eniros en detalojn pri MicroProfile, krom helpi Spring-programistojn kompreni kiel ili povas uzi Spring API-ojn kun MicroProfile-API-oj en Quarkus.
Ujoj kaj Kubernetes
Por konservi ĉi tiun artikolon simpla, ni kovros nur la altnivelajn aspektojn de subteno ĉi tie.
Quarkus ankaŭ
Finfine, fokusante Kubernetes kiel la cela deplojmedio, Quarkus ne uzas Java kadrojn en kazoj kie simila funkcieco estas efektivigita sur la nivelo de la Kubernetes platformo mem. Tablo 1 provizas mapon de la funkcia korespondado inter Kubernetes kaj tipaj Java kadroj uzataj de Spring-programistoj.
Tablo 1. Mapo de funkcia korespondado inter Java kadroj kaj Kubernetes.
Funkcia
Tradicia Printempa Boto
Kubernetoj
Servo-malkovro
Eureka
DNS
agordo
Printempa Nuba Agordo
Agordo Mapoj/Sekretoj
Balancado de ŝarĝo
Rubando (klienta flanko)
Servo, Replica Regilo (servila flanko)
Kompilante kaj kurante la kodon de la ekzemplo
En ĉi tiu artikolo ni referencas
Spring Framework APIoj
Dependa Injekto
Quarkus subtenas gamon da
В
Tablo 2. Ekzemploj de uzado de la subtenataj Spring DI-APIoj.
Subtenataj Printempaj DI Trajtoj
ekzemploj
Konstruisto Injekto
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Kampa Injekto
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Agordo
@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;
}
}
Reta kadro
Uzantoj de MicroProfile amos, ke Quarkus subtenas JAX-RS, MicroProfile Rest Client, JSON-P kaj JSON-B kiel la ĉefan retprogramadan modelon. Printempaj programistoj ĝojos pri lastatempa subteno de Quarkus por la Spring Web API, precipe REST-interfacoj. Simile al Spring DI, la ĉefa celo de Spring Web API-subteno estas ebligi Spring-programistojn uzi Spring Web API-ojn kune kun MicroProfile-API. Ekzemploj pri kiel uzi la subtenatajn Spring Web API-ojn estas disponigitaj en Tabelo 3, kaj pli da informoj kaj ekzemploj pri ĉi tiu temo troveblas en la Quarkus-lernilo nomata
Tablo 3. Ekzemploj de uzado de la subtenataj Spring Web API-oj.
Subtenataj Printempaj Retaj Trajtoj
ekzemploj
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@PetoBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (parta)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Uzantoj de MicroProfile ankaŭ aprezos, ke Quarkus subtenas JPA uzante la Hibernate ORM. Estas ankaŭ bonaj novaĵoj por Spring-programistoj: Quarkus subtenas komunajn komentariojn kaj tipojn de Spring Data JPA. Ekzemploj de uzado de la subtenataj Spring Data JPA-API-oj estas donitaj en Tabelo 4.
В
Tablo 4. Ekzemploj de uzado de subtenataj Spring Data JPA-APIoj.
Subtenataj Spring Data JPA-Trajtoj
ekzemploj
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaDeponejo
PagingAnd SortingDepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Deponejo Fragmentoj
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Derivitaj demandaj metodoj
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Demandoj difinitaj de uzanto
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 APIoj
Kulpo toleremo
Faŭltoleremo-konstruaĵoj estas tre gravaj por malhelpi kaskadajn fiaskojn kaj krei fidindajn mikroservajn arkitekturojn. Printempaj programistoj uzas ŝaltilojn por faŭltoleremo dum multaj jaroj.
Tablo 5. Ekzemploj de uzado de subtenataj MicroProfile Fault Tolerance API-oj.
Trajtoj de MicroProfile Fault Tolerance
Priskribo
ekzemploj
@Asinkrona
Efektivigante logikon en aparta fadeno
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Kalmuro
Limigu la nombron da samtempaj petoj
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Cirkvitrompilo
Inteligenta misfunkciado kaj reakiro de misfunkciadoj
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Voki alternativan logikon en kazo de fiasko
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Reprovu je peto malsukceso
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Tempo de malsukceso-kontrolo
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Kontrolado de servoj (Serva Sano)
Kubernetes-platformoj kontrolas la sanon de ujoj uzante specialajn servojn. Por permesi al la subesta platformo monitori servojn, Spring-programistoj kutime uzas kutiman HealthIndicator kaj Spring Boot Actuator. En Quarkus, tio povas esti farita per MicroProfile Health, kiu defaŭlte faras vivecon-kontrolon, sed povas esti agordita por samtempe kontroli vivecon kaj pretecon. Ekzemploj pri kiel uzi la subtenatajn MicroProfile Health API-ojn estas disponigitaj en Tabelo 6, kaj pliaj informoj estas disponigitaj en la Quarkus-manlibro.
Tablo 6: Uzado-ekzemploj de subtenataj MicroProfile Health API-oj.
Trajtoj de MicroProfile Health
Priskribo
ekzemploj
@Viveco
La platformaj rekomencoj malsukcesis konteneritajn aplikojn
Finpunkto:
gastiganto:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Preteco
La platformo ne sendos trafikon al konteneritaj aplikoj se ĝi ne estas preta
Finpunkto:
gastiganto:8080/sano/preta
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metriko
Aplikoj disponigas metrikojn por aŭ funkciaj celoj (por monitori rendimentajn SLAojn) aŭ ne-funkciajn celojn (komercaj SLAoj). Printempaj programistoj provizas metrikojn per Spring Boot Actuator kaj Mikrometro. Siavice, Quarkus uzas MicroProfile Metrics por provizi bazliniajn metrikojn (JVM kaj operaciumo), vendistajn metrikojn (Quarkus) kaj aplikaĵajn metrikojn. MicroProfile Metrics postulas, ke la efektivigo subtenas produktaĵformatojn JSON kaj OpenMetrics (Prometheus). Ekzemploj de uzado de la MicroProfile Metrics API estas donitaj en Tabelo 7.
В
Tabelo 7. Ekzemploj de uzado de MicroProfile Metrics API-oj.
Trajtoj de MicroProfile Metrics
Priskribo
ekzemploj
@kalkulita
Indikas nombrilon, kiu nombras la nombron da fojoj kiam komentita objekto estis vokita
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Indikas mezurilon kiu kalkulas la nombron da samtempaj vokoj al komentita objekto
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Indikas mezurilon kiu mezuras la valoron de komentita objekto
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Indikas metrosensilon kiu monitoras la vokfrekvencon de komentita objekto
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Komentario enhavanta informojn pri metadatenoj kiam peto estas ricevita por enigi aŭ produkti metrikon
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Indikas tempigilon, kiu spuras la daŭron de komentita objekto
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrikaj Finpunktoj
Aplikaj metrikoj
Bazaj metrikoj
Vendistaj metrikoj
Ĉiuj metrikoj
MikroProfile Rest Kliento
Mikroservoj ofte disponigas RESTfulajn finpunktojn kiuj postulas respondajn klientajn APIojn funkcii per ili. Por uzi RESTful-finpunktojn, Spring-programistoj kutime uzas RestTemplate. Quarkus ofertas MicroProfile Rest Client API-ojn por solvi ĉi tiun problemon, kies ekzemploj de uzo estas donitaj en Tabelo 8.
В
Tablo 8. Ekzemploj de uzado de MicroProfile Rest Client API-oj.
Trajtoj de MicroProfile Rest Kliento
Priskribo
ekzemploj
@RegisterRestClient
Registras tajpitan Java-interfacon kiel REST-klienton
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Markas la efektivigon de kazo de tajpita REST-klientinterfaco
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Alvoko
Vokas REST-finpunkton
System.out.println(
restClient.getSalutation());
mp-ripozo/url
Specifas la REST-finpunkton
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Rezultoj
En ĉi tiu blogo, celita ĉefe al Spring-programistoj, ni rapide rigardis kiel uzi la Spring API-ojn kun la MicroProfile-API-oj en Quarkus por evoluigi Java-mikroservojn kaj poste kompili ilin en indiĝenan binaran kodon, kiu ŝparas centojn da megabajtoj da RAM kaj lanĉas en. afero de milisekundoj.
Kiel vi jam komprenis, pli da informoj pri subteno por la Spring kaj MicroProfile APIs, same kiel multaj aliaj utilaj informoj, troveblas en
fonto: www.habr.com