Üdv mindenkinek, itt a harmadik bejegyzés a Quarkus sorozatban!
Java mikroszolgáltatások fejlesztésekor gyakran úgy gondolják, hogy
Kicsit részletesebben először megvizsgáljuk a Quarkus Spring API-k támogatási körét és részleteit, hogy megmutassuk a Spring fejlesztőinek, hogyan használhatják a MicroProfile API-t a mindennapi munkájuk során. Ezután kitérünk a MicroProfile API-kra, amelyek hasznosak a Spring fejlesztői számára a mikroszolgáltatások létrehozásakor.
Miért Quarkus? Először is, ez az élő kódolás, vagyis a MicroProfile API, Spring API és más Java API-k változásainak automatikus újratöltése, amely egyetlen paranccsal hajtható végre: mvn quarkus:dev. Másodszor, figyelembe véve
Nem megyünk bele a MicroProfile részleteibe, azon kívül, hogy segítsünk a Spring fejlesztőinek megérteni, hogyan használhatják a Spring API-kat MicroProfile API-kkal a Quarkusban.
Konténerek és Kubernetes
A cikk egyszerűsége érdekében itt csak a támogatás magas szintű vonatkozásaira térünk ki.
Quarkus is
Végül, mivel a Kubernetesre összpontosít, mint a céltelepítési környezetre, a Quarkus nem használ Java-keretrendszereket olyan esetekben, amikor hasonló funkcionalitást a Kubernetes platform szintjén is megvalósítanak. Az 1. táblázat a Kubernetes és a Spring fejlesztők által használt tipikus Java-keretrendszerek közötti funkcionális megfelelést mutatja be.
1. táblázat: A Java keretrendszerek és a Kubernetes közötti funkcionális megfeleltetés térképe.
funkcionális
Hagyományos tavaszi csizma
Kubernetes
Szolgáltatás felfedezése
Eureka
DNS
Configuration
Spring Cloud Config
Config Maps/Secrets
Terheléselosztás
Szalag (ügyféloldal)
Szolgáltatás, replikációs vezérlő (kiszolgálóoldali)
A kód fordítása és futtatása a példából
Ebben a cikkben hivatkozunk
Spring Framework API-k
Függőség-befecskendezés
A Quarkus számos funkciót támogat
В
2. táblázat: Példák a támogatott Spring DI API-k használatára.
Támogatott tavaszi DI funkciók
Примеры
Konstruktor befecskendezés
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Helyi befecskendezés
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Konfiguráció
@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;
}
}
Webes keretrendszer
A MicroProfile felhasználók imádni fogják, hogy a Quarkus támogatja a JAX-RS-t, a MicroProfile Rest Client-et, a JSON-P-t és a JSON-B-t, mint elsődleges webes programozási modellt. A tavaszi fejlesztők elégedettek lesznek azzal, hogy a Quarkus nemrégiben támogatja a Spring Web API-t, különösen a REST felületeket. A Spring DI-hez hasonlóan a Spring Web API támogatásának fő célja, hogy lehetővé tegye a Spring fejlesztők számára a Spring Web API-k használatát MicroProfile API-kkal együtt. A támogatott Spring Web API-k használatára vonatkozó példák a 3. táblázatban találhatók, a témával kapcsolatos további információk és példák pedig a Quarkus oktatóanyagban találhatók.
3. táblázat: Példák a támogatott Spring Web API-k használatára.
Támogatott tavaszi webszolgáltatások
Примеры
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (részleges)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
A MicroProfile felhasználók azt is értékelni fogják, hogy a Quarkus támogatja a JPA-t a Hibernate ORM használatával. Van egy jó hír is a Spring fejlesztői számára: a Quarkus támogatja a közös Spring Data JPA megjegyzéseket és típusokat. A támogatott Spring Data JPA API-k használatára vonatkozó példákat a 4. táblázat tartalmazza.
В
4. táblázat: Példák a támogatott Spring Data JPA API-k használatára.
Támogatott Spring Data JPA funkciók
Примеры
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
raktár
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Repository Fragments
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Származtatott lekérdezési módszerek
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Felhasználó által definiált lekérdezések
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-k
Hibatűrés
A hibatűrési konstrukciók nagyon fontosak a lépcsőzetes hibák megelőzésében és a megbízható mikroszolgáltatási architektúrák létrehozásában. A tavaszi fejlesztők évek óta használják a megszakítókat a hibatűrés érdekében.
5. táblázat: Példák a támogatott MicroProfile hibatűrő API-k használatára.
Mikroprofil hibatűrési jellemzők
Leírás
Примеры
@Aszinkron
A logika végrehajtása külön szálban
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Válaszfal
Korlátozza az egyidejű kérések számát
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@Biztosíték
Okos hibakezelés és helyreállítás a hibákból
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Hiba esetén alternatív logika hívása
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Próbálja újra, ha a kérés sikertelen
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Hibakontroll időtúllépés
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Szolgáltatások ellenőrzése (Szolgáltatás állapota)
A Kubernetes platformok speciális szolgáltatások segítségével figyelik a konténerek állapotát. Annak érdekében, hogy az alapul szolgáló platform figyelhesse a szolgáltatásokat, a Spring fejlesztői általában egyéni HealthIndicator-t és Spring Boot Actuator-t használnak. A Quarkusban ezt a MicroProfile Health segítségével lehet megtenni, amely alapértelmezés szerint élességellenőrzést végez, de beállítható úgy is, hogy egyszerre ellenőrizze az élénkséget és a készenlétet. A támogatott MicroProfile Health API-k használatára vonatkozó példák a 6. táblázatban találhatók, további információk pedig a Quarkus kézikönyvben találhatók.
6. táblázat: Példák a támogatott MicroProfile Health API-k használatára.
A MicroProfile Health szolgáltatásai
Leírás
Примеры
@Életesség
A platform újraindítja a sikertelen konténeres alkalmazásokat
Végpont:
házigazda:8080/egészség/élő
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Készenlét
A platform nem küld forgalmat konténeres alkalmazásoknak, ha nem áll készen
Végpont:
host:8080/egészség/kész
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Metrikák
Az alkalmazások mérőszámokat biztosítanak akár működési célokra (a teljesítmény SLA-k figyelésére), akár nem működési célokra (üzleti SLA-k). A tavaszi fejlesztők a Spring Boot Actuator és a Micrometer használatával biztosítják a mutatókat. A Quarkus viszont a MicroProfile Metrics segítségével biztosítja az alapszintű mérőszámokat (JVM és operációs rendszer), a szállítói mérőszámokat (Quarkus) és az alkalmazási mérőszámokat. A MicroProfile Metrics megköveteli, hogy a megvalósítás támogassa a JSON és az OpenMetrics (Prometheus) kimeneti formátumokat. A MicroProfile Metrics API használatára a 7. táblázatban talál példákat.
В
7. táblázat: Példák a MicroProfile Metrics API-k használatára.
MicroProfile Metrics jellemzői
Leírás
Примеры
@Számolt
Egy számláló számlálót jelöl, amely megszámolja, hogy hányszor hívtak meg egy annotált objektumot
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Olyan mérőeszközt jelöl, amely számolja a megjegyzésekkel ellátott objektum egyidejű hívásainak számát
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Nyomtáv
Olyan mérőérzékelőt jelöl, amely egy megjegyzéssel ellátott objektum értékét méri
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Olyan mérőérzékelőt jelöl, amely egy megjegyzéssel ellátott objektum hívási gyakoriságát figyeli
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Metaadatokkal kapcsolatos információkat tartalmazó megjegyzés, amikor egy metrika megadására vagy előállítására vonatkozó kérelem érkezik
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Egy időzítőt jelöl, amely nyomon követi a megjegyzésekkel ellátott objektum időtartamát
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrikák végpontjai
Alkalmazási mutatók
Alapvető mérőszámok
Szállítói mutatók
Minden mérőszám
MicroProfile Rest Client
A mikroszolgáltatások gyakran biztosítanak RESTful végpontokat, amelyekhez megfelelő ügyfél API-k szükségesek. A RESTful végpontok használatához a Spring fejlesztői általában a RestTemplate-et használják. A Quarkus MicroProfile Rest Client API-kat kínál a probléma megoldására, amelyek felhasználási példáit a 8. táblázat tartalmazza.
В
8. táblázat: Példák a MicroProfile Rest Client API-k használatára.
MicroProfile Rest Client funkciók
Leírás
Примеры
@RegisterRestClient
A beírt Java interfészt REST kliensként regisztrálja
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Egy beírt REST kliens felület példányának megvalósítását jelöli
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
könyörgés
REST végpontot hív meg
System.out.println(
restClient.getSalutation());
mp-rest/url
Megadja a REST végpontot
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Eredményei
Ebben a blogban, amely elsősorban a Spring fejlesztőinek szól, áttekintettük, hogyan használhatjuk a Spring API-kat a Quarkus MicroProfile API-jaival Java mikroszolgáltatások fejlesztésére, majd azokat natív bináris kódba fordítva, amely több száz megabájt RAM-ot takarít meg, és ezredmásodperc kérdése.
Amint azt már megértette, a Spring és a MicroProfile API-k támogatásával kapcsolatos további információk, valamint sok más hasznos információ a következő helyen található:
Forrás: will.com