Kaabo gbogbo eniyan, eyi ni ifiweranṣẹ kẹta ni jara Quarkus!
Nigbati o ba ndagbasoke awọn iṣẹ microservice Java, igbagbogbo gbagbọ pe
Ni alaye diẹ sii, a yoo kọkọ wo iwọn ati awọn alaye ti bii Quarkus ṣe ṣe atilẹyin Awọn API orisun omi lati ṣafihan awọn olupilẹṣẹ orisun omi bi wọn ṣe le lo MicroProfile API ni iṣẹ ojoojumọ wọn. Lẹhinna a yoo bo awọn API MicroProfile, eyiti o wulo fun awọn olupilẹṣẹ orisun omi nigba ṣiṣẹda awọn iṣẹ microservices.
Kini idi ti Quarkus? Ni akọkọ, eyi ni ifaminsi laaye, iyẹn ni, atunko laifọwọyi ti eyikeyi awọn ayipada ninu MicroProfile API, Orisun API ati awọn API Java miiran, eyiti o ṣe pẹlu aṣẹ kan: mvn quarkus: dev. Ẹlẹẹkeji, kà ni
A ko ni lọ sinu awọn alaye nipa MicroProfile, yatọ si lati ṣe iranlọwọ fun awọn olupilẹṣẹ Orisun omi ni oye bi wọn ṣe le lo awọn API orisun omi pẹlu MicroProfile APIs ni Quarkus.
Awọn apoti ati Kubernetes
Lati jẹ ki nkan yii rọrun, a yoo bo awọn aaye ipele giga ti atilẹyin nikan nibi.
Quarkus tun
Lakotan, nipa idojukọ Kubernetes bi agbegbe imuṣiṣẹ ibi-afẹde, Quarkus ko lo awọn ilana Java ni awọn ọran nibiti a ti ṣe iru iṣẹ ṣiṣe ni ipele ti Syeed Kubernetes funrararẹ. Tabili 1 n pese maapu kan ti ifọrọranṣẹ iṣẹ laarin Kubernetes ati awọn ilana Java aṣoju ti awọn olupilẹṣẹ orisun omi lo.
Tabili 1. Maapu ti ifọrọranṣẹ iṣẹ laarin awọn ilana Java ati Kubernetes.
Iṣẹ-ṣiṣe
Ibile Orisun omi Boot
Kubernetes
Awari iṣẹ
Eureka
DNS
iṣeto ni
Orisun Cloud Config
Tunto Maps/Aṣiri
Fifi iwọntunwọnsi
Ribbon (ẹgbẹ onibara)
Iṣẹ, Atunṣe Atunṣe (ẹgbẹ olupin)
Iṣakojọpọ ati ṣiṣiṣẹ koodu lati apẹẹrẹ
Ninu nkan yii a tọka si
Orisun Framework APIs
Abẹrẹ igbẹkẹle
Quarkus ṣe atilẹyin sakani ti
В
Table 2. Awọn apẹẹrẹ ti lilo orisun omi DI API ti o ni atilẹyin.
Atilẹyin Orisun omi DI Awọn ẹya ara ẹrọ
Awọn apẹẹrẹ
Abẹrẹ olupilẹṣẹ
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Abẹrẹ aaye
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
Iṣeto ni
@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;
}
}
Ilana ayelujara
Awọn olumulo MicroProfile yoo nifẹ pe Quarkus ṣe atilẹyin JAX-RS, Onibara Isinmi MicroProfile, JSON-P, ati JSON-B gẹgẹbi awoṣe siseto wẹẹbu akọkọ. Awọn olupilẹṣẹ orisun omi yoo ni idunnu pẹlu atilẹyin aipẹ Quarkus fun API Oju opo wẹẹbu Orisun omi, ni pataki awọn atọkun REST. Iru si Orisun omi DI, ibi-afẹde akọkọ ti atilẹyin Oju opo wẹẹbu Orisun Orisun ni lati jẹ ki awọn olupilẹṣẹ Orisun omi lo awọn API Wẹẹbu Orisun ni apapọ pẹlu MicroProfile APIs. Awọn apẹẹrẹ ti bii o ṣe le lo awọn oju opo wẹẹbu orisun omi ti o ni atilẹyin ti pese ni Tabili 3, ati pe alaye diẹ sii ati awọn apẹẹrẹ lori koko yii ni a le rii ninu ikẹkọ Quarkus ti a pe
Table 3. Awọn apẹẹrẹ ti lilo awọn atilẹyin orisun omi Wẹẹbù APIs.
Atilẹyin Orisun omi Awọn ẹya ara ẹrọ
Awọn apẹẹrẹ
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@Gba maapu
@PostMapping
@PutMapping
@ParẹMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@Ipo idahun
@ExceptionHandler
@RestControllerAdvice (apakan)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Orisun data JPA
Awọn olumulo MicroProfile yoo tun ni riri pe Quarkus ṣe atilẹyin JPA nipa lilo Hibernate ORM. Awọn iroyin ti o dara tun wa fun awọn olupilẹṣẹ Orisun omi: Quarkus ṣe atilẹyin awọn alaye orisun orisun omi JPA ti o wọpọ ati awọn iru. Awọn apẹẹrẹ ti lilo awọn atilẹyin orisun omi Data JPA API ni a fun ni Tabili 4.
В
Table 4. Awọn apẹẹrẹ ti lilo atilẹyin orisun omi Data JPA APIs.
Atilẹyin Orisun omi Data JPA Awọn ẹya ara ẹrọ
Awọn apẹẹrẹ
Ibi ipamọ Crud
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Atunjade
JpaRepository
Ibi ipamọ PagingAndSorting
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Ajẹkù ibi ipamọ
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Awọn ọna ibeere ti ari
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Awọn ibeere ti olumulo-telẹ
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);
}
Awọn API MicroProfile
Ifarada aṣiṣe
Awọn igbelewọn ifarada aṣiṣe jẹ pataki pupọ fun idilọwọ awọn ikuna cascading ati ṣiṣẹda awọn faaji microservice ti o gbẹkẹle. Awọn olupilẹṣẹ orisun omi ti nlo awọn olufọpa Circuit fun ifarada ẹbi fun ọpọlọpọ ọdun.
Table 5. Awọn apẹẹrẹ ti lilo atilẹyin MicroProfile Fault Fault APIs.
Awọn ẹya Ifarada Fault MicroProfile
Apejuwe
Awọn apẹẹrẹ
@Asynchronous
Ṣiṣe awọn ilana kannaa ni okun lọtọ
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Idiwọn nọmba awọn ibeere nigbakanna
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Opin Iyika monamona
Imudani ikuna Smart ati imularada lati awọn ikuna
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Pipe yiyan kannaa ni irú ti ikuna
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Tun gbiyanju lori ikuna ibeere
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Aago iṣakoso ikuna
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Ṣiṣayẹwo awọn iṣẹ (Ilera Iṣẹ)
Awọn iru ẹrọ Kubernetes ṣe abojuto ilera ti awọn apoti nipa lilo awọn iṣẹ pataki. Lati gba aaye ipilẹ laaye lati ṣe atẹle awọn iṣẹ, awọn olupilẹṣẹ orisun omi nigbagbogbo lo aṣafihan HealthIndicator ati Orisun Boot Actuator. Ni Quarkus, eyi le ṣee ṣe nipa lilo MicroProfile Health, eyiti nipasẹ aiyipada ṣe ayẹwo igbesi aye, ṣugbọn o le tunto lati ṣayẹwo igbesi aye ati imurasilẹ ni nigbakannaa. Awọn apẹẹrẹ ti bii o ṣe le lo MicroProfile Health API ti o ni atilẹyin ni a pese ni Tabili 6, ati pe a pese alaye ni afikun ninu iwe afọwọkọ Quarkus
Tabili 6: Awọn apẹẹrẹ lilo ti Awọn API Ilera MicroProfile ti atilẹyin.
MicroProfile Health awọn ẹya ara ẹrọ
Apejuwe
Awọn apẹẹrẹ
@Aye
Syeed atunbere kuna awọn ohun elo apoti
Opin Ipari:
ogun: 8080 / ilera / gbe
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@ imurasilẹ
Syeed kii yoo firanṣẹ ijabọ si awọn ohun elo ti a fi sinu apoti ti ko ba ṣetan
Opin Ipari:
ogun: 8080 / ilera / setan
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Awọn iwọn
Awọn ohun elo pese awọn metiriki fun boya awọn idi iṣiṣẹ (lati ṣe atẹle awọn iṣẹ SLAs) tabi awọn idi ti kii ṣe iṣẹ (SLAs iṣowo). Awọn olupilẹṣẹ orisun omi n pese awọn metiriki lilo orisun omi Boot Actuator ati Micrometer. Ni ọna, Quarkus nlo MicroProfile Metrics lati pese awọn metiriki ipilẹ (JVM ati ẹrọ ṣiṣe), awọn metiriki ataja (Quarkus), ati awọn metiriki ohun elo. MicroProfile Metrics nbeere wipe imuse ṣe atilẹyin JSON ati OpenMetrics (Prometheus) awọn ọna kika igbejade. Awọn apẹẹrẹ ti lilo MicroProfile Metrics API ni a fun ni Tabili 7.
В
Tabili 7. Awọn apẹẹrẹ ti lilo MicroProfile Metrics APIs.
MicroProfile Metrics Awọn ẹya ara ẹrọ
Apejuwe
Awọn apẹẹrẹ
@Ti a kà
Ntọka si counter counter ti o ka iye awọn akoko ti a ti pe ohun ti a ṣe alaye
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Ntọkasi wiwọn kan ti o ka nọmba awọn ipe nigbakanna si nkan ti a ṣe asọye
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Awon
Ntọkasi sensọ iwọn ti o wọn iye nkan ti a ṣe asọye
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Ṣe afihan sensọ mita kan ti o ṣe abojuto igbohunsafẹfẹ ipe ti nkan ti a ṣe asọye
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Alaye ti o ni alaye ninu metadata nigba ti o ba gba ibeere kan lati tẹ tabi gbejade metiriki kan
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Tọkasi aago kan ti o tọpa iye akoko ohun ti a ṣe asọye
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metiriki Endpoints
Awọn metiriki ohun elo
Awọn metiriki ipilẹ
Metiriki ataja
Gbogbo awọn metiriki
Onibara Isinmi MicroProfile
Awọn iṣẹ Microservice nigbagbogbo pese awọn aaye ipari RESTful ti o nilo awọn API alabara ti o baamu lati ṣiṣẹ pẹlu. Lati lo awọn aaye ipari RESTful, awọn olupilẹṣẹ orisun omi nigbagbogbo lo RestTemplate. Quarkus nfunni Awọn API Onibara Isinmi MicroProfile lati yanju iṣoro yii, awọn apẹẹrẹ lilo eyiti a fun ni Tabili 8.
В
Table 8. Awọn apẹẹrẹ ti lilo MicroProfile Isinmi Client APIs.
MicroProfile Isinmi Client Awọn ẹya ara ẹrọ
Apejuwe
Awọn apẹẹrẹ
@RegisterRestClient
Ṣe iforukọsilẹ ni wiwo Java ti o tẹ bi alabara REST kan
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Ṣe samisi imuse ti apẹẹrẹ ti wiwo alabara REST ti a tẹ
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Ifawe
Npe aaye ipari REST kan
System.out.println(
restClient.getSalutation());
mp-isinmi / url
Ni pato aaye ipari REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Awọn esi
Ninu bulọọgi yii, ti a pinnu ni akọkọ si awọn olupilẹṣẹ Orisun omi, a ṣe akiyesi ni iyara bi a ṣe le lo awọn API orisun omi pẹlu awọn API MicroProfile ni Quarkus lati ṣe agbekalẹ awọn iṣẹ microservices Java ati lẹhinna ṣajọ wọn sinu koodu alakomeji abinibi ti o fipamọ awọn ọgọọgọrun megabyte ti Ramu ati awọn ifilọlẹ ni ọrọ kan ti milliseconds.
Gẹgẹbi o ti loye tẹlẹ, alaye diẹ sii nipa atilẹyin fun Orisun omi ati MicroProfile APIs, ati ọpọlọpọ alaye to wulo miiran, ni a le rii ni
orisun: www.habr.com