Kumusta sa tanan, ania ang ikatulo nga post sa serye sa Quarkus!
Kung nagpalambo sa mga microservice sa Java, kanunay nga gituohan nga
Sa gamay nga detalye, atong tan-awon una ang sakup ug mga detalye kung giunsa pagsuporta sa Quarkus ang mga Spring API aron ipakita sa mga developer sa Spring kung giunsa paggamit ang MicroProfile API sa ilang adlaw-adlaw nga trabaho. Dayon atong tabonan ang MicroProfile APIs, nga mapuslanon alang sa Spring developers sa paghimo og microservices.
Ngano Quarkus? Una, kini mao ang live coding, sa ato pa, awtomatik nga pag-reload sa bisan unsang mga pagbag-o sa MicroProfile API, Spring API ug uban pang mga Java API, nga gihimo sa usa lang ka sugo: mvn quarkus:dev. Ikaduha, gihisgutan sa
Dili na kami magdetalye bahin sa MicroProfile, gawas sa pagtabang sa mga developer sa Spring nga masabtan kung giunsa nila paggamit ang mga Spring API nga adunay mga MicroProfile API sa Quarkus.
Mga sudlanan ug Kubernetes
Aron mapasimple kining artikuloha, tabonan lang nato ang taas nga lebel nga aspeto sa suporta dinhi.
Quarkus usab
Sa katapusan, pinaagi sa pag-focus sa Kubernetes isip target nga deployment environment, ang Quarkus wala mogamit sa Java frameworks sa mga kaso diin ang susamang functionality gipatuman sa lebel sa Kubernetes platform mismo. Ang talaan 1 naghatag ug mapa sa functional nga mga sulat tali sa Kubernetes ug kasagarang Java frameworks nga gigamit sa Spring developers.
Talaan 1. Mapa sa functional correspondence tali sa Java frameworks ug Kubernetes.
Nahiangay
Tradisyonal nga Spring Boot
Kubernetes
Pagdiskobre sa serbisyo
Eureka
DNS
kontorno
Spring Cloud Config
I-configure ang mga Mapa/Mga Sekreto
Pagbalanse sa pagkarga
Ribbon (kliyente nga bahin)
Serbisyo, Replikasyon Controller (server side)
Pag-compile ug pagpadagan sa code gikan sa pananglitan
Niini nga artikulo atong gitumong
Spring Framework APIs
Pagdugang sa Pagdugang
Quarkus nagsuporta sa usa ka lain-laing mga
Π
Talaan 2. Mga pananglitan sa paggamit sa gisuportahan nga Spring DI APIs.
Gisuportahan nga Spring DI Features
mga panig-ingnan
Constructor Injection
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Field Injection
@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;
}
}
Web framework
Ang mga tiggamit sa MicroProfile ganahan nga ang Quarkus nagsuporta sa JAX-RS, MicroProfile Rest Client, JSON-P, ug JSON-B isip nag-unang modelo sa web programming. Ang mga developer sa tingpamulak malipay sa bag-o nga suporta ni Quarkus alang sa Spring Web API, ilabi na sa mga interface sa REST. Sama sa Spring DI, ang nag-unang tumong sa suporta sa Spring Web API mao ang paghimo sa Spring developers sa paggamit sa Spring Web APIs inubanan sa MicroProfile APIs. Ang mga panig-ingnan kung giunsa paggamit ang gisuportahan nga Spring Web API gihatag sa Talaan 3, ug dugang nga kasayuran ug mga pananglitan niini nga hilisgutan makita sa panudlo sa Quarkus nga gitawag
Talaan 3. Mga pananglitan sa paggamit sa gisuportahan nga Spring Web APIs.
Gisuportahan ang Spring Web Features
mga panig-ingnan
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (partial)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Ang mga tiggamit sa MicroProfile mapasalamaton usab nga ang Quarkus nagsuporta sa JPA gamit ang Hibernate ORM. Adunay usab maayong balita alang sa mga developer sa Spring: Gisuportahan sa Quarkus ang sagad nga mga anotasyon ug tipo sa Spring Data JPA. Ang mga pananglitan sa paggamit sa gisuportahan nga Spring Data JPA APIs gihatag sa Table 4.
Π
Talaan 4. Mga pananglitan sa paggamit sa gisuportahan nga Spring Data JPA APIs.
Gisuportahan nga Spring Data JPA Features
mga panig-ingnan
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Mga Fragment sa Repositori
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Nakuha nga mga pamaagi sa pagpangutana
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Mga pangutana nga gitakda sa user
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);
}
Mga MicroProfile API
Ang pagtugot sa sayup
Ang mga pagtukod sa pagtugot sa sayup hinungdanon kaayo alang sa pagpugong sa mga kapakyasan sa cascading ug paghimo sa kasaligan nga mga arkitektura sa microservice. Ang mga tig-develop sa tingpamulak naggamit sa mga circuit breaker alang sa pagtugot sa sayup sa daghang mga tuig.
Talaan 5. Mga pananglitan sa paggamit sa gisuportahan nga MicroProfile Fault Tolerance APIs.
MicroProfile Fault Tolerance Features
paghulagway
mga panig-ingnan
@Asynchronous
Pagpatuman sa lohika sa usa ka lahi nga hilo
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Limitahi ang gidaghanon sa dungan nga mga hangyo
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Smart kapakyasan pagdumala ug pagbawi gikan sa mga kapakyasan
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Pagtawag sa alternatibong lohika kung adunay kapakyasan
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Sulayi pag-usab kung napakyas ang paghangyo
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ang kapakyasan sa pagkontrol sa timeout
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Mga serbisyo sa pagsusi (Serbisyo sa Panglawas)
Ang mga platform sa Kubernetes nagmonitor sa kahimsog sa mga sudlanan gamit ang mga espesyal nga serbisyo. Aron tugotan ang nagpahiping plataporma sa pag-monitor sa mga serbisyo, ang mga developer sa Spring kasagarang mogamit sa usa ka custom nga HealthIndicator ug Spring Boot Actuator. Sa Quarkus, mahimo kini gamit ang MicroProfile Health, nga pinaagi sa default naghimo sa usa ka liveness check, apan mahimo nga ma-configure aron dungan nga susihon ang kabuhong ug kaandam. Ang mga pananglitan kung giunsa paggamit ang gisuportahan nga MicroProfile Health API gihatag sa Talaan 6, ug ang dugang nga kasayuran gihatag sa manwal sa Quarkus
Talaan 6: Mga pananglitan sa paggamit sa gisuportahan nga mga MicroProfile Health API.
Mga bahin sa Panglawas sa MicroProfile
paghulagway
mga panig-ingnan
@Pagkinabuhi
Ang pag-reboot sa plataporma napakyas sa mga containerized nga aplikasyon
Katapusan nga punto:
host: 8080 / panglawas / buhi
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Andam
Ang plataporma dili magpadala sa trapiko sa mga containerized nga aplikasyon kung dili pa kini andam
Katapusan nga punto:
host: 8080 / panglawas / andam
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mga sukatan
Naghatag ang mga aplikasyon og metrics para sa operational purposes (aron mamonitor ang performance SLAs) o non-operational purposes (business SLAs). Naghatag ang mga developer sa tingpamulak og mga sukatan gamit ang Spring Boot Actuator ug Micrometer. Sa baylo, gigamit ni Quarkus ang MicroProfile Metrics para maghatag ug baseline metrics (JVM ug operating system), vendor metrics (Quarkus), ug application metrics. Ang MicroProfile Metrics nagkinahanglan nga ang pagpatuman nagsuporta sa JSON ug OpenMetrics (Prometheus) nga mga format sa output. Ang mga pananglitan sa paggamit sa MicroProfile Metrics API gihatag sa Table 7.
Π
Talaan 7. Mga pananglitan sa paggamit sa mga MicroProfile Metrics API.
Mga Feature sa MicroProfile Sukatan
paghulagway
mga panig-ingnan
@Giihap
Nagpasabut sa usa ka counter counter nga nag-ihap sa gidaghanon sa mga higayon nga ang usa ka annotated nga butang gitawag
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Nagpasabot sa usa ka gauge nga nag-ihap sa gidaghanon sa mga dungan nga tawag sa usa ka annotated nga butang
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Nagpasabot sa gauge sensor nga nagsukod sa bili sa usa ka annotated nga butang
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Nagpasabot ug metro sensor nga nagmonitor sa frequency sa tawag sa usa ka annotated nga butang
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Usa ka anotasyon nga adunay kasayuran bahin sa metadata kung ang usa ka hangyo madawat nga mosulod o maghimo usa ka sukatan
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nagpakita sa usa ka timer nga nagsubay sa gidugayon sa usa ka annotated nga butang
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Mga Sukatan sa Katapusan nga Punto
Mga sukatan sa aplikasyon
Panguna nga mga sukatan
Mga sukatan sa vendor
Tanan nga sukatan
Kliyente sa Pagpahulay sa MicroProfile
Ang mga microservice kasagarang naghatag ug RESTful nga mga endpoint nga nanginahanglan ug katugbang nga mga API sa kliyente aron magamit. Aron magamit ang RESTful nga mga endpoint, kasagarang gigamit sa mga developer sa Spring ang RestTemplate. Ang Quarkus nagtanyag sa MicroProfile Rest Client API aron masulbad kini nga problema, ang mga pananglitan sa paggamit niini gihatag sa Table 8.
Π
Talaan 8. Mga pananglitan sa paggamit sa MicroProfile Rest Client APIs.
Mga Feature sa Kliyente sa Pagpahulay sa MicroProfile
paghulagway
mga panig-ingnan
@RegisterRestClient
Nagrehistro sa usa ka gi-type nga Java interface isip usa ka REST nga kliyente
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Nagtimaan sa pagpatuman sa usa ka pananglitan sa usa ka gi-type nga interface sa kliyente nga REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Pag-ampo
Nagtawag ug REST endpoint
System.out.println(
restClient.getSalutation());
mp-pahulay/url
Gipiho ang REST endpoint
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Mga resulta
Sa kini nga blog, nga gitumong sa panguna sa mga developer sa Spring, among gitan-aw dayon kung giunsa ang paggamit sa mga Spring API sa mga MicroProfile API sa Quarkus aron mapalambo ang mga microservice sa Java ug dayon i-compile kini sa lumad nga binary code nga makatipig gatusan ka megabytes sa RAM ug ilunsad sa. usa ka butang sa milliseconds.
Sama sa imong nasabtan na, dugang nga impormasyon bahin sa suporta alang sa Spring ug MicroProfile APIs, ingon man sa daghang uban pang mapuslanong impormasyon, makita sa
Source: www.habr.com