Silav her kes, li vir posta sêyemîn di rêzenivîsa Quarkus de ye!
Dema ku mîkroxizmetên Java pêşve dibin, pir caran tê bawer kirin ku
Bi hûrgulî hûrgulî, em ê pêşî li çarçove û hûrguliyan binihêrin ka Quarkus çawa piştgirî dide Spring API-yên ku ji pêşdebirên Spring re nîşan bide ka meriv çawa API-ya MicroProfile di xebata xwe ya rojane de bikar tîne. Dûv re em ê API-yên MicroProfile, yên ku ji bo pêşdebirên Spring-ê dema çêkirina mîkroservisan bikêr in veşêrin.
Çima Quarkus? Ya yekem, ev kodkirina zindî ye, ango barkirina otomatîkî ya her guhertinên di MicroProfile API, Spring API û API-yên din ên Java de, ku tenê bi yek fermanê tête kirin: mvn quarkus:dev. Ya duyemîn, di nav de gotûbêj kirin
Em ê di derbarê MicroProfile de hûrgulî neçin, ji xeynî ku em ji pêşdebirên Spring re bibin alîkar ku fêm bikin ka ew çawa dikarin API-ên Spring bi API-yên MicroProfile li Quarkus-ê bikar bînin.
Konteynirên û Kubernetes
Ji bo ku em vê gotarê sade bimînin, em ê tenê li vir aliyên piştevaniya asta bilind veşêrin.
Quarkus jî
Di dawiyê de, bi balkişandina li ser Kubernetes wekî hawîrdora bicîhkirina armancê, Quarkus di rewşên ku fonksiyonên wekhev di asta platforma Kubernetes bixwe de têne bicîh kirin de çarçoveyên Java-yê bikar nayîne. Tablo 1 nexşeyek pêwendiya fonksiyonel a di navbera Kubernetes û çarçoveyên Java yên tîpîk ên ku ji hêla pêşdebirên Spring ve têne bikar anîn peyda dike.
Tablo 1. Nexşeya pêwendiya fonksiyonel a di navbera çarçoveyên Java û Kubernetes de.
Çalakiyê
Traditional Spring Boot
Kubernetes
Vedîtina xizmetê
Eureka
DNS
configuration
Bihara Cloud Config
Veavakirina Nexşeyên / Veşartî
Loading balansa
Ribbon (aliyê xerîdar)
Karûbar, Kontrolkerê Repplication (aliyê serverê)
Berhevkirin û xebitandina kodê ji nimûneyê
Di vê gotarê de em behsa
API-yên Çarçoveya Biharê
Injection Dependency
Quarkus rêzek piştgirî dike
В
Tablo 2. Nimûneyên karanîna Spring DI API-yên piştgirîkirî.
Taybetmendiyên Spring DI piştgirî kirin
wergerandî
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;
@ Veavakirina
@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;
}
}
çarçoveya Webê
Bikarhênerên MicroProfile dê hez bikin ku Quarkus wekî modela bernameya webê ya bingehîn JAX-RS, MicroProfile Rest Client, JSON-P, û JSON-B piştgirî dike. Pêşdebirên biharê dê ji piştgirîya dawî ya Quarkus ji bo Spring Web API, bi taybetî pêwendiyên REST, kêfxweş bibin. Mîna Spring DI, armanca sereke ya piştevaniya Spring Web API ev e ku pêşdebirên Spring bikar bînin ku API-ên Spring Web-ê bi hev re bi API-yên MicroProfile re bikar bînin. Nimûneyên çawaniya karanîna API-yên Web Spring Spring-ê yên piştgirî di Tablo 3 de têne peyda kirin, û bêtir agahdarî û nimûneyên li ser vê mijarê dikarin di dersa Quarkusê ya bi navê
Tablo 3. Nimûneyên bikaranîna API-ên Webê yên Spring Spring.
Taybetmendiyên Webê yên Biharê piştgirî kirin
wergerandî
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (beş)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Daneyên Spring JPA
Bikarhênerên MicroProfile jî dê teqdîr bikin ku Quarkus JPA-yê bi karanîna ORM-a Hibernate piştgirî dike. Di heman demê de ji bo pêşdebirên Spring Spring jî nûçeyên baş hene: Quarkus annotasyon û celebên Daneyên Spring JPA yên hevpar piştgirî dike. Mînakên karanîna API-yên JPA Daneyên Spring-ê yên piştgirî di Tablo 4 de têne dayîn.
В
Tablo 4. Nimûneyên karanîna API-yên Daneyên Spring JPA yên piştgirîkirî.
Taybetmendiyên JPA Daneyên Biharê piştgirî kirin
wergerandî
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Daxistin
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Parçeyên Depoyê
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Rêbazên lêpirsînê yên derkirî
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Pirsên bikarhêner diyarkirî
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 APIs
Toleransa xeletiyê
Avahiyên tolerasyona xeletiyê ji bo pêşîgirtina têkçûnên kaskadî û afirandina mîmariyên mîkroxizmeta pêbawer pir girîng in. Pêşdebirên biharê bi gelek salan ve ji bo tolerasyona xeletiyê şikestinan bikar tînin.
Tablo 5. Nimûneyên karanîna API-yên Toleransê yên Xeletiya MicroProfile piştgirî kirin.
Taybetmendiyên Tolerasyona Xeletiya MicroProfile
description
wergerandî
@Asynchronous
Bicîhkirina mantiqê di mijarek cuda de
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Hejmara daxwazên hevdemî sînor bikin
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Desthilatdariya têkçûna Smart û başkirina ji têkçûnan
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Di rewşa têkçûnê de gazîkirina mantiqa alternatîf
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Li ser têkçûna daxwazê ji nû ve biceribîne
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Dema kontrolkirina têkçûnê
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Karûbarên kontrolkirinê (Service Tenduristî)
Platformên Kubernetes tenduristiya konteyneran bi karanîna karûbarên taybetî dişopînin. Ji bo ku rê bidin platforma bingehîn ku karûbaran bişopîne, pêşdebirên Spring bi gelemperî HealthIndicatorek xwerû û Spring Boot Actuator bikar tînin. Di Quarkus de, ev dikare bi karanîna Tenduristiya MicroProfile ve were kirin, ku ji hêla xwerû ve kontrolek zindîtiyê dike, lê dikare were mîheng kirin ku bi hevdemî zindîbûn û amadebûnê kontrol bike. Nimûneyên ku meriv çawa API-yên Tenduristî yên MicroProfile yên piştgirî têne bikar anîn di Tablo 6-ê de têne peyda kirin, û agahdariya zêde di manuala Quarkus de têne peyda kirin.
Tablo 6: Mînakên karanîna API-yên Tenduristiya MicroProfile yên piştgirîkirî.
Taybetmendiyên Tenduristiya MicroProfile
description
wergerandî
@Liveness
Platform serîlêdanên konteynirkirî yên têkçûyî ji nû ve dest pê dike
Xala dawî:
mêvandar: 8080 / tenduristî / zindî
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Amadekarî
Ger platform ne amade be dê seyrûseferê ji serîlêdanên konteyneran re neşîne
Xala dawî:
mêvandar: 8080 / tenduristî / amade
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metrics
Serlêdan metrîkan ji bo mebestên xebitandinê (ji bo şopandina SLA-yên performansê) an ji bo armancên ne-xebatî (SLA-yên karsaziyê) peyda dikin. Pêşdebirên biharê bi karanîna Spring Boot Actuator û Micrometer metrîkan peyda dikin. Di encamê de, Quarkus Metrîkên MicroProfile bikar tîne da ku metrîkên bingehîn (JVM û pergala xebitandinê), metrîkên firoşkar (Quarkus), û metrîkên serîlêdanê peyda bike. MicroProfile Metrics hewce dike ku pêkanîn formatên derketinê JSON û OpenMetrics (Prometheus) piştgirî bike. Nimûneyên karanîna MicroProfile Metrics API di Tabloya 7 de têne dayîn.
В
Tablo 7. Nimûneyên karanîna API-yên MîcroProfile Metrics.
Taybetmendiyên Metrîkên MicroProfile
description
wergerandî
@Hejmar kirin
Dijmarek jimarker destnîşan dike ku çend carên ku tişta şirovekirî hatiye gazîkirin dihejmêre
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Pîvanek nîşan dide ku hejmara bangên hevdemî ji bo tiştek şirovekirî dihejmêre
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Pîvok
Sensorek pîvanê destnîşan dike ku nirxa tiştek şirovekirî dipîve
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Sensorek metreyê destnîşan dike ku frekansa bangê ya tişta şirovekirî dişopîne
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Annotationek ku di derheqê metadata de agahdarî vedihewîne dema ku daxwazek ji bo têketin an hilberîna metrîkê tête wergirtin
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Demjimêrek ku dirêjahiya tiştek şîrovekirî dişopîne destnîşan dike
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrics Endpoints
Metrîkên serîlêdanê
Metrîkên bingehîn
Metrîkên vendor
Hemû metrics
MicroProfile Rest Client
Microservices bi gelemperî xalên dawiya RESTful peyda dikin ku hewce dike ku API-yên xerîdar ên têkildar bi wan re bixebitin. Ji bo ku xalên dawiya RESTful bikar bînin, pêşdebirên Spring bi gelemperî RestTemplate bikar tînin. Quarkus ji bo çareserkirina vê pirsgirêkê API-yên MicroProfile Rest Client pêşkêşî dike, mînakên karanîna wan di Tablo 8 de têne dayîn.
В
Tablo 8. Mînakên bikaranîna MicroProfile Rest Client APIs.
Taybetmendiyên MicroProfile Rest Client
description
wergerandî
@RegisterRestClient
Têkiliyek Java-ya tîpkirî wekî xerîdarek REST tomar dike
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Pêkanîna mînakek pêwendiya xerîdar a REST-ê ya tîpkirî nîşan dide
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Vexwendin
Gazî xala dawiya REST dike
System.out.println(
restClient.getSalutation());
mp-rest/url
Xala dawiya REST diyar dike
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Encam
Di vê blogê de, ku di serî de ji pêşdebirên Springê re tê armanc kirin, me bi lez nihêrî ka meriv çawa API-yên Spring bi API-yên MicroProfile re li Quarkus-ê bikar tîne da ku mîkroxizmetên Java-yê pêşve bibe û dûv re wan di koda binary ya xwemalî de berhev bike ku bi sedan megabyte RAM-ê xilas dike û di nav de dest pê dike. meseleya milîsaniyeyan.
Wekî ku we berê jî fêm kir, bêtir agahdarî di derbarê piştgirî ji bo Spring and MicroProfile APIs, û hem jî gelek agahdariyên din ên kêrhatî, dikarin li
Source: www.habr.com