Γεια σε όλους, ορίστε η τρίτη ανάρτηση της σειράς Quarkus!
Κατά την ανάπτυξη μικρουπηρεσιών Java, πιστεύεται συχνά ότι
Με λίγο περισσότερες λεπτομέρειες, θα δούμε πρώτα το εύρος και τις λεπτομέρειες του τρόπου με τον οποίο το Quarkus υποστηρίζει τα Spring API για να δείξουμε στους προγραμματιστές Spring πώς να χρησιμοποιούν το MicroProfile API στην καθημερινή τους εργασία. Στη συνέχεια, θα καλύψουμε τα API MicroProfile, τα οποία είναι χρήσιμα για τους προγραμματιστές Spring κατά τη δημιουργία μικροϋπηρεσιών.
Γιατί Quarkus; Πρώτον, πρόκειται για ζωντανή κωδικοποίηση, δηλαδή για αυτόματη επαναφόρτωση τυχόν αλλαγών στο MicroProfile API, στο Spring API και σε άλλα Java API, η οποία εκτελείται με μία μόνο εντολή: mvn quarkus:dev. Δεύτερον, εξετάζεται σε
Δεν θα αναφερθούμε σε λεπτομέρειες σχετικά με το MicroProfile, εκτός από το να βοηθήσουμε τους προγραμματιστές της Spring να κατανοήσουν πώς μπορούν να χρησιμοποιήσουν τα Spring API με τα API MicroProfile στο Quarkus.
Εμπορευματοκιβώτια και Kubernetes
Για να διατηρήσουμε αυτό το άρθρο απλό, θα καλύψουμε μόνο τις πτυχές υψηλού επιπέδου της υποστήριξης εδώ.
Quarkus επίσης
Τέλος, εστιάζοντας στο Kubernetes ως το περιβάλλον ανάπτυξης στόχου, το Quarkus δεν χρησιμοποιεί πλαίσια Java σε περιπτώσεις όπου παρόμοια λειτουργικότητα υλοποιείται στο επίπεδο της ίδιας της πλατφόρμας Kubernetes. Ο Πίνακας 1 παρέχει έναν χάρτη της λειτουργικής αντιστοιχίας μεταξύ του Kubernetes και των τυπικών πλαισίων Java που χρησιμοποιούνται από προγραμματιστές Spring.
Πίνακας 1. Χάρτης λειτουργικής αντιστοιχίας μεταξύ πλαισίων Java και Kubernetes.
Λειτουργικό
Παραδοσιακή ανοιξιάτικη μπότα
Kubernetes
Ανακάλυψη υπηρεσίας
Εύρηκα
DNS
διαμόρφωση
Spring Cloud Config
Διαμόρφωση Χαρτών/Μυστικών
Εξισορρόπηση φορτίου
Κορδέλα (πλευρά πελάτη)
Service, Replication Controller (από την πλευρά του διακομιστή)
Μεταγλώττιση και εκτέλεση του κώδικα από το παράδειγμα
Σε αυτό το άρθρο αναφερόμαστε
Spring Framework API
Ενεση εξάρτησης
Το Quarkus υποστηρίζει μια σειρά από
В
Πίνακας 2. Παραδείγματα χρήσης των υποστηριζόμενων Spring DI API.
Υποστηριζόμενες λειτουργίες Spring DI
παραδείγματα
Constructor Injection
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Έγχυση πεδίου
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Διαμόρφωση
@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 πλαίσιο
Οι χρήστες του MicroProfile θα λατρέψουν ότι το Quarkus υποστηρίζει τα JAX-RS, MicroProfile Rest Client, JSON-P και JSON-B ως το κύριο μοντέλο προγραμματισμού ιστού. Οι προγραμματιστές Spring θα είναι ευχαριστημένοι με την πρόσφατη υποστήριξη του Quarkus για το Spring Web API, ιδιαίτερα τις διεπαφές REST. Παρόμοια με το Spring DI, ο κύριος στόχος της υποστήριξης Spring Web API είναι να επιτρέψει στους προγραμματιστές Spring να χρησιμοποιούν Spring Web API σε συνδυασμό με MicroProfile API. Παραδείγματα για τον τρόπο χρήσης των υποστηριζόμενων Spring Web API παρέχονται στον Πίνακα 3 και περισσότερες πληροφορίες και παραδείγματα σχετικά με αυτό το θέμα μπορείτε να βρείτε στο σεμινάριο Quarkus που ονομάζεται
Πίνακας 3. Παραδείγματα χρήσης των υποστηριζόμενων Spring Web API.
Υποστηριζόμενες λειτουργίες ιστού Spring
παραδείγματα
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (μερική)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Οι χρήστες του MicroProfile θα εκτιμήσουν επίσης ότι το Quarkus υποστηρίζει JPA χρησιμοποιώντας το Hibernate ORM. Υπάρχουν επίσης καλά νέα για τους προγραμματιστές Spring: Το Quarkus υποστηρίζει κοινούς σχολιασμούς και τύπους Spring Data JPA. Παραδείγματα χρήσης των υποστηριζόμενων Spring Data JPA API δίνονται στον Πίνακα 4.
В
Πίνακας 4. Παραδείγματα χρήσης υποστηριζόμενων Spring Data JPA API.
Υποστηριζόμενες λειτουργίες Spring Data JPA
παραδείγματα
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
ΑΠΟΘΕΤΗΡΙΟ
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Θραύσματα αποθήκης
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Παράγωγες μέθοδοι ερωτήματος
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Ερωτήματα που καθορίζονται από τον χρήστη
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
Ανοχή σε σφάλματα
Οι κατασκευές ανοχής σφαλμάτων είναι πολύ σημαντικές για την πρόληψη των διαδοχικών αστοχιών και τη δημιουργία αξιόπιστων αρχιτεκτονικών μικροϋπηρεσιών. Οι προγραμματιστές ελατηρίου χρησιμοποιούν διακόπτες κυκλώματος για ανοχή σφαλμάτων εδώ και πολλά χρόνια.
Πίνακας 5. Παραδείγματα χρήσης υποστηριζόμενων API ανοχής σφαλμάτων MicroProfile.
Χαρακτηριστικά ανοχής σφαλμάτων MicroProfile
Περιγραφή
παραδείγματα
@Ασύγχρονη
Εκτέλεση λογικής σε ξεχωριστό νήμα
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Διάφραγμα
Περιορίστε τον αριθμό των ταυτόχρονων αιτημάτων
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Έξυπνος χειρισμός αστοχιών και ανάκτηση από αστοχίες
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Κλήση εναλλακτικής λογικής σε περίπτωση αποτυχίας
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Προσπαθήστε ξανά κατόπιν αποτυχίας αιτήματος
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Λήξη χρονικού ορίου ελέγχου αποτυχίας
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Έλεγχος υπηρεσιών (Υγεία υπηρεσιών)
Οι πλατφόρμες Kubernetes παρακολουθούν την υγεία των εμπορευματοκιβωτίων χρησιμοποιώντας ειδικές υπηρεσίες. Για να επιτρέπεται στην υποκείμενη πλατφόρμα να παρακολουθεί τις υπηρεσίες, οι προγραμματιστές Spring χρησιμοποιούν συνήθως έναν προσαρμοσμένο δείκτη Health και έναν ενεργοποιητή εκκίνησης ελατηρίου. Στο Quarkus, αυτό μπορεί να γίνει χρησιμοποιώντας το MicroProfile Health, το οποίο από προεπιλογή εκτελεί έναν έλεγχο ζωντανότητας, αλλά μπορεί να ρυθμιστεί για να ελέγχει ταυτόχρονα τη ζωντάνια και την ετοιμότητα. Παραδείγματα χρήσης των υποστηριζόμενων MicroProfile Health API παρέχονται στον Πίνακα 6 και πρόσθετες πληροφορίες παρέχονται στο εγχειρίδιο του Quarkus
Πίνακας 6: Παραδείγματα χρήσης υποστηριζόμενων API του MicroProfile Health.
Χαρακτηριστικά MicroProfile Health
Περιγραφή
παραδείγματα
@Ζωντανότητα
Η πλατφόρμα επανεκκινεί αποτυχημένες εφαρμογές με κοντέινερ
Τελικό σημείο:
host:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Ετοιμότητα
Η πλατφόρμα δεν θα στέλνει επισκεψιμότητα σε εφαρμογές με κοντέινερ εάν δεν είναι έτοιμη
Τελικό σημείο:
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();
}
Μετρήσεις
Οι εφαρμογές παρέχουν μετρήσεις είτε για λειτουργικούς σκοπούς (για την παρακολούθηση των SLA απόδοσης) είτε για μη λειτουργικούς σκοπούς (επιχειρηματικές SLA). Οι προγραμματιστές Spring παρέχουν μετρήσεις χρησιμοποιώντας τον Ενεργοποιητή εκκίνησης και το Μικρόμετρο. Με τη σειρά του, το Quarkus χρησιμοποιεί το MicroProfile Metrics για να παρέχει μετρήσεις βάσης (JVM και λειτουργικό σύστημα), μετρήσεις προμηθευτών (Quarkus) και μετρήσεις εφαρμογών. Το MicroProfile Metrics απαιτεί η υλοποίηση να υποστηρίζει μορφές εξόδου JSON και OpenMetrics (Prometheus). Παραδείγματα χρήσης του MicroProfile Metrics API δίνονται στον Πίνακα 7.
В
Πίνακας 7. Παραδείγματα χρήσης MicroProfile Metrics API.
Λειτουργίες μετρήσεων MicroProfile
Περιγραφή
παραδείγματα
@Μέτρητος
Υποδηλώνει έναν μετρητή που μετράει πόσες φορές έχει κληθεί ένα αντικείμενο με σχολιασμό
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Υποδηλώνει ένα μετρητή που μετρά τον αριθμό των ταυτόχρονων κλήσεων σε ένα σχολιασμένο αντικείμενο
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Μετρητής
Υποδηλώνει έναν αισθητήρα μετρητή που μετρά την τιμή ενός σχολιασμένου αντικειμένου
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Υποδηλώνει έναν αισθητήρα μετρητή που παρακολουθεί τη συχνότητα κλήσης ενός σχολιασμένου αντικειμένου
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Ένας σχολιασμός που περιέχει πληροφορίες σχετικά με τα μεταδεδομένα όταν λαμβάνεται ένα αίτημα για εισαγωγή ή παραγωγή μιας μέτρησης
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Υποδεικνύει ένα χρονόμετρο που παρακολουθεί τη διάρκεια ενός σχολιασμένου αντικειμένου
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Τελικά σημεία μετρήσεων
Μετρήσεις εφαρμογής
Βασικές μετρήσεις
Μετρήσεις προμηθευτή
Όλες οι μετρήσεις
MicroProfile Rest Client
Οι μικροϋπηρεσίες παρέχουν συχνά τελικά σημεία RESTful που απαιτούν αντίστοιχα API πελατών για να λειτουργήσουν. Για να χρησιμοποιήσουν τα τελικά σημεία RESTful, οι προγραμματιστές Spring συνήθως χρησιμοποιούν το RestTemplate. Το Quarkus προσφέρει MicroProfile Rest Client API για την επίλυση αυτού του προβλήματος, παραδείγματα χρήσης των οποίων δίνονται στον Πίνακα 8.
В
Πίνακας 8. Παραδείγματα χρήσης MicroProfile Rest Client API.
Λειτουργίες πελάτη MicroProfile Rest
Περιγραφή
παραδείγματα
@RegisterRestClient
Καταχωρεί μια πληκτρολογημένη διεπαφή Java ως πελάτη REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Επισημαίνει την υλοποίηση μιας παρουσίας μιας πληκτρολογημένης διεπαφής πελάτη REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Επίκληση
Καλεί ένα τελικό σημείο REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Καθορίζει το τελικό σημείο REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Αποτελέσματα της
Σε αυτό το ιστολόγιο, που απευθύνεται κυρίως σε προγραμματιστές Spring, ρίξαμε μια γρήγορη ματιά στον τρόπο χρήσης των Spring API με τα API MicroProfile στο Quarkus για την ανάπτυξη μικροϋπηρεσιών Java και στη συνέχεια τη μεταγλώττιση τους σε εγγενή δυαδικό κώδικα που εξοικονομεί εκατοντάδες megabyte μνήμης RAM και εκκινεί σε θέμα χιλιοστών του δευτερολέπτου.
Όπως έχετε ήδη καταλάβει, περισσότερες πληροφορίες σχετικά με την υποστήριξη για τα Spring και MicroProfile API, καθώς και πολλές άλλες χρήσιμες πληροφορίες, μπορείτε να βρείτε στο
Πηγή: www.habr.com