Kumusta sa lahat, narito ang ikatlong post sa serye ng Quarkus!
Kapag bumubuo ng mga microservice ng Java, madalas itong pinaniniwalaan
Sa kaunting detalye, titingnan muna natin ang saklaw at mga detalye kung paano sinusuportahan ng Quarkus ang mga Spring API upang ipakita sa mga developer ng Spring kung paano gamitin ang MicroProfile API sa kanilang pang-araw-araw na gawain. Pagkatapos ay tatalakayin namin ang mga MicroProfile API, na kapaki-pakinabang para sa mga developer ng Spring kapag gumagawa ng mga microservice.
Bakit Quarkus? Una, ito ay live na coding, ibig sabihin, awtomatikong pag-reload ng anumang mga pagbabago sa MicroProfile API, Spring API at iba pang mga Java API, na ginagawa sa isang command lang: mvn quarkus:dev. Pangalawa, isinasaalang-alang sa
Hindi na kami magdedetalye tungkol sa MicroProfile, maliban sa tulungan ang mga developer ng Spring na maunawaan kung paano nila magagamit ang mga Spring API na may mga MicroProfile API sa Quarkus.
Mga lalagyan at Kubernete
Upang panatilihing simple ang artikulong ito, sasaklawin lang namin ang mga mataas na antas ng aspeto ng suporta dito.
Quarkus din
Sa wakas, sa pamamagitan ng pagtutok sa Kubernetes bilang target na deployment environment, hindi gumagamit ang Quarkus ng mga Java framework sa mga kaso kung saan ipinatupad ang katulad na functionality sa antas ng Kubernetes platform mismo. Ang Talahanayan 1 ay nagbibigay ng mapa ng functional na sulat sa pagitan ng Kubernetes at mga karaniwang Java framework na ginagamit ng mga developer ng Spring.
Talahanayan 1. Mapa ng functional correspondence sa pagitan ng Java frameworks at Kubernetes.
Gumagana
Tradisyonal na Spring Boot
Kubernetes
Pagtuklas ng serbisyo
Eureka
DNS
Configuration
Spring Cloud Config
I-configure ang Mga Mapa/Sikreto
Mag-load balancing
Ribbon (panig ng kliyente)
Serbisyo, Replication Controller (server side)
Pag-compile at pagpapatakbo ng code mula sa halimbawa
Sa artikulong ito ay tinutukoy namin
Mga Spring Framework API
Depensyon ng Iniksyon
Sinusuportahan ng Quarkus ang isang hanay ng
Π
Talahanayan 2. Mga halimbawa ng paggamit ng mga sinusuportahang Spring DI API.
Mga Sinusuportahang Feature ng Spring DI
Mga halimbawa
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;
}
}
Framework sa web
Magugustuhan ng mga user ng MicroProfile na sinusuportahan ng Quarkus ang JAX-RS, MicroProfile Rest Client, JSON-P, at JSON-B bilang pangunahing modelo ng web programming. Ang mga developer ng tagsibol ay nalulugod sa kamakailang suporta ng Quarkus para sa Spring Web API, sa partikular na mga interface ng REST. Katulad ng Spring DI, ang pangunahing layunin ng suporta sa Spring Web API ay paganahin ang mga developer ng Spring na gumamit ng mga Spring Web API kasabay ng mga MicroProfile API. Ang mga halimbawa ng kung paano gamitin ang mga sinusuportahang Spring Web API ay ibinibigay sa Talahanayan 3, at higit pang impormasyon at mga halimbawa sa paksang ito ay makikita sa Quarkus tutorial na tinatawag na
Talahanayan 3. Mga halimbawa ng paggamit ng mga sinusuportahang Spring Web API.
Mga sinusuportahang Spring Web Features
Mga halimbawa
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (bahagyang)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Mapapahalagahan din ng mga user ng MicroProfile na sinusuportahan ng Quarkus ang JPA gamit ang Hibernate ORM. Mayroon ding magandang balita para sa mga developer ng Spring: Sinusuportahan ng Quarkus ang mga karaniwang anotasyon at uri ng Spring Data JPA. Ang mga halimbawa ng paggamit ng mga sinusuportahang Spring Data JPA API ay ibinibigay sa Talahanayan 4.
Π
Talahanayan 4. Mga halimbawa ng paggamit ng mga sinusuportahang Spring Data JPA API.
Mga Sinusuportahang Feature ng Spring Data JPA
Mga halimbawa
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 ng Imbakan
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Nagmula sa mga pamamaraan ng query
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Mga query na tinukoy ng 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
Pagpapahintulot sa kasalanan
Napakahalaga ng mga fault tolerance construct para maiwasan ang mga cascading failure at paglikha ng maaasahang mga arkitektura ng microservice. Ang mga developer ng tagsibol ay gumagamit ng mga circuit-breaker para sa fault tolerance sa loob ng maraming taon.
Talahanayan 5. Mga halimbawa ng paggamit ng mga sinusuportahang MicroProfile Fault Tolerance API.
Mga Feature ng MicroProfile Fault Tolerance
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Mga halimbawa
@Asynchronous
Pagpapatupad ng lohika sa isang hiwalay na thread
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Limitahan ang bilang ng mga sabay-sabay na kahilingan
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Smart failure handling at pagbawi mula sa mga pagkabigo
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Umurong
Pagtawag ng alternatibong lohika kung sakaling mabigo
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Subukan muli kapag nabigo ang kahilingan
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Pag-timeout ng mabigong kontrol
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Pagsusuri ng mga serbisyo (Service Health)
Sinusubaybayan ng mga platform ng Kubernetes ang kalusugan ng mga container gamit ang mga espesyal na serbisyo. Upang payagan ang pinagbabatayan na platform na subaybayan ang mga serbisyo, karaniwang gumagamit ang mga developer ng Spring ng isang custom na HealthIndicator at Spring Boot Actuator. Sa Quarkus, maaari itong gawin gamit ang MicroProfile Health, na bilang default ay nagsasagawa ng liveness check, ngunit maaaring i-configure upang sabay na suriin ang liveness at kahandaan. Ang mga halimbawa ng kung paano gamitin ang mga sinusuportahang MicroProfile Health API ay ibinibigay sa Talahanayan 6, at ang karagdagang impormasyon ay ibinibigay sa manwal ng Quarkus
Talahanayan 6: Mga halimbawa ng paggamit ng mga sinusuportahang MicroProfile Health API.
Mga tampok ng MicroProfile Health
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Mga halimbawa
@Liveness
Nabigo ang pag-reboot ng platform sa mga containerized na application
Endpoint:
host:8080/kalusugan/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Kahandaan
Ang platform ay hindi magpapadala ng trapiko sa mga containerized na application kung hindi pa ito handa
Endpoint:
host:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Mga sukatan
Nagbibigay ang mga application ng mga sukatan para sa alinman sa mga layunin ng pagpapatakbo (upang subaybayan ang mga SLA ng pagganap) o mga layuning hindi pagpapatakbo (mga SLA ng negosyo). Nagbibigay ang mga developer ng spring ng mga sukatan gamit ang Spring Boot Actuator at Micrometer. Sa turn, gumagamit ang Quarkus ng MicroProfile Metrics para magbigay ng mga baseline metrics (JVM at operating system), vendor metrics (Quarkus), at application metrics. Kinakailangan ng MicroProfile Metrics na sinusuportahan ng pagpapatupad ang mga format ng output ng JSON at OpenMetrics (Prometheus). Ang mga halimbawa ng paggamit ng MicroProfile Metrics API ay ibinibigay sa Talahanayan 7.
Π
Talahanayan 7. Mga halimbawa ng paggamit ng mga MicroProfile Metrics API.
Mga Tampok ng MicroProfile Sukatan
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Mga halimbawa
@Bilang
Nagsasaad ng counter counter na nagbibilang ng bilang ng beses na tinawag ang isang annotated na bagay
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Nagsasaad ng gauge na nagbibilang ng bilang ng mga sabay-sabay na tawag sa isang annotated na bagay
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Panukat
Nagsasaad ng gauge sensor na sumusukat sa halaga ng isang annotated na bagay
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Nagsasaad ng meter sensor na sumusubaybay sa dalas ng tawag ng isang naka-annotate na bagay
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Isang anotasyon na naglalaman ng impormasyon tungkol sa metadata kapag natanggap ang isang kahilingan na magpasok o gumawa ng sukatan
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nagsasaad ng timer na sumusubaybay sa tagal ng isang annotated na bagay
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Mga Endpoint ng Sukat
Mga sukatan ng aplikasyon
Mga pangunahing sukatan
Mga sukatan ng vendor
Lahat ng sukatan
MicroProfile Rest Client
Ang mga microservice ay madalas na nagbibigay ng mga RESTful na endpoint na nangangailangan ng kaukulang mga API ng kliyente upang gumana. Upang gumamit ng mga RESTful na endpoint, karaniwang ginagamit ng mga developer ng Spring ang RestTemplate. Nag-aalok ang Quarkus ng mga MicroProfile Rest Client API upang malutas ang problemang ito, ang mga halimbawa ng paggamit nito ay ibinigay sa Talahanayan 8.
Π
Talahanayan 8. Mga halimbawa ng paggamit ng mga MicroProfile Rest Client API.
Mga Tampok ng MicroProfile Rest Client
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Mga halimbawa
@RegisterRestClient
Nagrerehistro ng naka-type na Java interface bilang isang REST client
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Minamarkahan ang pagpapatupad ng isang instance ng isang na-type na REST client interface
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Pagsamba
Tumatawag ng REST endpoint
System.out.println(
restClient.getSalutation());
mp-pahinga/url
Tinutukoy ang REST endpoint
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Mga resulta ng
Sa blog na ito, na pangunahing nakatuon sa mga developer ng Spring, mabilis naming tiningnan kung paano gamitin ang mga Spring API kasama ang mga MicroProfile API sa Quarkus upang bumuo ng mga microservice ng Java at pagkatapos ay i-compile ang mga ito sa katutubong binary code na nakakatipid ng daan-daang megabytes ng RAM at inilulunsad sa isang bagay ng milliseconds.
Tulad ng naintindihan mo na, higit pang impormasyon tungkol sa suporta para sa Spring at MicroProfile API, pati na rin ang maraming iba pang kapaki-pakinabang na impormasyon, ay matatagpuan sa
Pinagmulan: www.habr.com