Hər kəsə salam, Quarkus seriyasındakı üçüncü yazı!
Java mikroservislərini inkişaf etdirərkən çox vaxt buna inanırlar
Bir az daha təfərrüatlı olaraq, Spring tərtibatçılarına gündəlik işlərində MicroProfile API-dən necə istifadə etmələrini göstərmək üçün Quarkus-un Spring API-lərini necə dəstəklədiyinin əhatə dairəsi və təfərrüatlarına baxacağıq. Sonra mikroservislər yaratarkən Spring tərtibatçıları üçün faydalı olan MicroProfile API-lərini əhatə edəcəyik.
Niyə Quarkus? Birincisi, bu, canlı kodlaşdırmadır, yəni MicroProfile API, Spring API və digər Java API-lərində hər hansı bir dəyişikliyin avtomatik yenidən yüklənməsi, yalnız bir əmrlə yerinə yetirilir: mvn quarkus:dev. İkincisi, nəzərə alınır
Bahar tərtibatçılarına Quarkusda MicroProfile API ilə Spring API-lərindən necə istifadə edə biləcəklərini başa düşməkdən başqa, MicroProfile haqqında təfərrüata girməyəcəyik.
Konteynerlər və Kubernetlər
Bu məqaləni sadə saxlamaq üçün biz burada yalnız dəstəyin yüksək səviyyəli aspektlərini əhatə edəcəyik.
Quarkus da
Nəhayət, hədəf yerləşdirmə mühiti kimi Kubernetes-ə diqqət yetirməklə, Quarkus oxşar funksionallığın Kubernetes platformasının özü səviyyəsində həyata keçirildiyi hallarda Java çərçivələrindən istifadə etmir. Cədvəl 1, Kubernetes və Spring tərtibatçıları tərəfindən istifadə edilən tipik Java çərçivələri arasında funksional yazışmaların xəritəsini təqdim edir.
Cədvəl 1. Java çərçivələri və Kubernetes arasında funksional yazışmaların xəritəsi.
Funksional
Ənənəvi Yaz Çəkməsi
Kubernetes
Xidmət kəşfi
Evrika
DNS
Konfiqurasiya
Bahar Bulud Konfiqurasiyası
Xəritələri/Sirləri konfiqurasiya edin
Yük tarazlığı
Lent (müştəri tərəfi)
Xidmət, Replikasiya Nəzarətçisi (server tərəfi)
Nümunədən kodun tərtib edilməsi və işə salınması
Bu yazıda istinad edirik
Spring Framework API-ləri
Asılılıq Enjeksiyonu
Quarkus bir sıra dəstəkləyir
В
Cədvəl 2. Dəstəklənən Spring DI API-lərindən istifadə nümunələri.
Dəstəklənən Spring DI Xüsusiyyətləri
Nümunələr
Konstruktor inyeksiyası
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Sahə inyeksiyası
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@ Konfiqurasiya
@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;
}
}
Veb çərçivə
MicroProfile istifadəçiləri Quarkus-un JAX-RS, MicroProfile Rest Client, JSON-P və JSON-B-ni əsas veb proqramlaşdırma modeli kimi dəstəkləməsini sevəcəklər. Bahar tərtibatçıları Quarkusun Spring Web API, xüsusən REST interfeysləri üçün son dəstəyindən məmnun qalacaqlar. Spring DI kimi, Spring Web API dəstəyinin əsas məqsədi Spring tərtibatçılarına MicroProfile API-ləri ilə birlikdə Spring Web API-lərindən istifadə etmək imkanı verməkdir. Dəstəklənən Spring Web API-lərinin necə istifadə ediləcəyinə dair nümunələr Cədvəl 3-də verilmişdir və bu mövzuda daha çox məlumat və nümunələr Quarkus adlı təlimatda tapıla bilər.
Cədvəl 3. Dəstəklənən Spring Web API-lərindən istifadə nümunələri.
Dəstəklənən Bahar Veb Xüsusiyyətləri
Nümunələr
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (qismən)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
MicroProfile istifadəçiləri Quarkusun Hibernate ORM-dən istifadə edərək JPA-nı dəstəklədiyini də qiymətləndirəcəklər. Bahar tərtibatçıları üçün də yaxşı xəbər var: Quarkus ümumi Spring Data JPA annotasiyalarını və növlərini dəstəkləyir. Dəstəklənən Spring Data JPA API-lərindən istifadə nümunələri Cədvəl 4-də verilmişdir.
В
Cədvəl 4. Dəstəklənən Spring Data JPA API-lərindən istifadə nümunələri.
Dəstəklənən Spring Data JPA Xüsusiyyətləri
Nümunələr
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Depo
JpaRepository
PagingVəSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Repozitor fraqmentləri
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Alınan sorğu üsulları
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
İstifadəçi tərəfindən müəyyən edilmiş sorğular
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 API-ləri
Səhv tolerantlığı
Arızaya dözümlülük konstruksiyaları kaskad uğursuzluqların qarşısının alınması və etibarlı mikroservis arxitekturalarının yaradılması üçün çox vacibdir. Bahar tərtibatçıları uzun illərdir ki, nasazlığa dözümlülük üçün elektrik açarlarından istifadə edirlər.
Cədvəl 5. Dəstəklənən MicroProfile Fault Tolerance API-lərindən istifadə nümunələri.
MicroProfile Hata Dözümlülük Xüsusiyyətləri
Təsvir
Nümunələr
@Asinxron
Ayrı bir mövzuda məntiqin icrası
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Eyni vaxtda sorğuların sayını məhdudlaşdırın
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Ağıllı uğursuzluqların idarə edilməsi və uğursuzluqların bərpası
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Geri çəkilmək
Uğursuzluq halında alternativ məntiq çağırmaq
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Sorğu uğursuz olduqda yenidən cəhd edin
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Uğursuzluğa nəzarət müddəti
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Yoxlama xidmətləri (Xidmət Sağlamlığı)
Kubernetes platformaları xüsusi xidmətlərdən istifadə edərək konteynerlərin sağlamlığına nəzarət edir. Əsas platformanın xidmətləri izləməsinə icazə vermək üçün Bahar tərtibatçıları adətən xüsusi HealthIndicator və Spring Boot Actuator istifadə edirlər. Quarkusda bu, standart olaraq canlılıq yoxlanışı həyata keçirən, lakin canlılığı və hazırlığı eyni vaxtda yoxlamaq üçün konfiqurasiya edilə bilən MicroProfile Health-dən istifadə etməklə edilə bilər. Dəstəklənən MicroProfile Sağlamlıq API-lərinin necə istifadə ediləcəyinə dair nümunələr Cədvəl 6-da verilmişdir və əlavə məlumat Quarkus təlimatında verilmişdir.
Cədvəl 6: Dəstəklənən MicroProfile Sağlamlıq API-lərinin istifadə nümunələri.
MicroProfile Sağlamlıq xüsusiyyətləri
Təsvir
Nümunələr
@canlılıq
Platforma uğursuz konteyner tətbiqlərini yenidən yükləyir
Son nöqtə:
host:8080/sağlamlıq/canlı
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Hazırlıq
Platforma hazır deyilsə, konteynerləşdirilmiş tətbiqlərə trafik göndərməyəcək
Son nöqtə:
host:8080/sağlamlıq/hazır
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metriklər
Tətbiqlər ya əməliyyat məqsədləri (performans SLA-larına nəzarət etmək üçün) və ya qeyri-əməliyyat məqsədləri (biznes SLAs) üçün ölçüləri təmin edir. Bahar tərtibatçıları Spring Boot Aktuator və Mikrometrdən istifadə edərək ölçüləri təmin edirlər. Öz növbəsində, Quarkus əsas göstəriciləri (JVM və əməliyyat sistemi), satıcı ölçülərini (Quarkus) və tətbiq ölçülərini təmin etmək üçün MicroProfile Metriklərindən istifadə edir. MicroProfile Metrics tətbiqin JSON və OpenMetrics (Prometheus) çıxış formatlarını dəstəkləməsini tələb edir. MicroProfile Metrics API-dən istifadə nümunələri Cədvəl 7-də verilmişdir.
В
Cədvəl 7. MicroProfile Metrics API-lərindən istifadə nümunələri.
MicroProfile Metrik Xüsusiyyətləri
Təsvir
Nümunələr
@Sayılır
Annotasiya edilmiş obyektin neçə dəfə çağırıldığını hesablayan sayğac sayğacını bildirir
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Annotasiya edilmiş obyektə eyni vaxtda edilən zənglərin sayını hesablayan ölçünü bildirir
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Annotasiya edilmiş obyektin dəyərini ölçən ölçü sensorunu bildirir
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Annotasiya edilmiş obyektin zəng tezliyinə nəzarət edən sayğac sensorunu bildirir
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Metrik daxil etmək və ya yaratmaq üçün sorğu qəbul edildikdə metadata haqqında məlumatı ehtiva edən annotasiya
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Annotasiya edilmiş obyektin müddətini izləyən taymeri göstərir
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrik son nöqtələri
Tətbiq ölçüləri
Əsas ölçülər
Satıcı ölçüləri
Bütün ölçülər
MicroProfile İstirahət Müştərisi
Mikroservislər tez-tez işləmək üçün müvafiq müştəri API-lərini tələb edən RESTful son nöqtələri təmin edir. RESTful son nöqtələrindən istifadə etmək üçün Spring tərtibatçıları adətən RestTemplate istifadə edirlər. Quarkus bu problemi həll etmək üçün MicroProfile Rest Client API təklif edir, onlardan istifadə nümunələri Cədvəl 8-də verilmişdir.
В
Cədvəl 8. MicroProfile Rest Client API-lərindən istifadə nümunələri.
MicroProfile İstirahət Müştəri Xüsusiyyətləri
Təsvir
Nümunələr
@RegisterRestClient
Yazılmış Java interfeysini REST müştərisi kimi qeyd edir
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Yazılan REST müştəri interfeysinin nümunəsinin həyata keçirilməsini qeyd edir
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Dəvət
REST son nöqtəsini çağırır
System.out.println(
restClient.getSalutation());
mp-istirahət/url
REST son nöqtəsini təyin edir
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Nəticələri
Əsasən Bahar tərtibatçılarına yönəlmiş bu bloqda biz Java mikroservislərini inkişaf etdirmək və sonra onları yüzlərlə meqabayt operativ yaddaşa qənaət edən yerli ikili koda yığmaq üçün Quarkusda MicroProfile API ilə Spring API-lərindən necə istifadə olunacağına qısa nəzər saldıq. millisaniyə məsələsi.
Artıq başa düşdüyünüz kimi, Spring və MicroProfile API-lərinə dəstək haqqında daha çox məlumatı, eləcə də bir çox digər faydalı məlumatları burada tapa bilərsiniz.
Mənbə: www.habr.com