Сайн байцгаана уу, Quarkus цувралын 3 дахь бичлэгийг хүргэж байна!
Java микро үйлчилгээг хөгжүүлэхдээ ихэвчлэн ийм зүйл итгэдэг
Бага зэрэг дэлгэрэнгүй, бид эхлээд Spring хөгжүүлэгчдэд MicroProfile API-г өдөр тутмын ажилдаа хэрхэн ашиглахыг харуулахын тулд Quarkus Spring API-г хэрхэн дэмждэг талаар дэлгэрэнгүй авч үзэх болно. Дараа нь бид хаврын хөгжүүлэгчдэд бичил үйлчилгээ үүсгэхэд хэрэг болох MicroProfile API-уудыг авч үзэх болно.
Яагаад Кваркус гэж? Нэгдүгээрт, энэ бол шууд кодчилол, өөрөөр хэлбэл MicroProfile API, Spring API болон бусад Java API-д гарсан өөрчлөлтийг автоматаар дахин ачаалах бөгөөд үүнийг зөвхөн нэг тушаалаар гүйцэтгэдэг: mvn quarkus:dev. Хоёрдугаарт, авч үзсэн
Бид Spring-ийн хөгжүүлэгчдэд Spring API-уудыг Quarkus дахь MicroProfile API-тай хэрхэн ашиглах талаар ойлгоход нь туслахаас өөр MicroProfile-ийн талаар дэлгэрэнгүй ярихгүй.
Контейнер ба Кубернет
Энэ нийтлэлийг энгийн байлгахын тулд бид зөвхөн дээд түвшний дэмжлэгийг энд авч үзэх болно.
Кваркус бас
Эцэст нь Кубернетесийг зорилтот байршуулах орчин болгон төвлөрүүлснээр Quarkus нь Kubernetes платформын түвшинд ижил төстэй функцийг хэрэгжүүлсэн тохиолдолд Java хүрээг ашигладаггүй. Хүснэгт 1-д Кубернетес болон Spring хөгжүүлэгчдийн ашигладаг ердийн Java хүрээнүүдийн хоорондох функциональ харилцааны газрын зургийг үзүүлэв.
Хүснэгт 1. Java framework болон Kubernetes хоорондын функциональ харилцааны газрын зураг.
Функциональ
Уламжлалт хаврын гутал
Kubernetes
Үйлчилгээний нээлт
Эврика
DNS
Тохиргоо
Хаврын үүл тохиргоо
Газрын зураг/Нууцыг тохируулах
Ачааллыг тэнцвэржүүлэх
Тууз (үйлчлүүлэгч тал)
Үйлчилгээ, хуулбарлах хянагч (серверийн тал)
Жишээн дээрх кодыг эмхэтгэж ажиллуулж байна
Энэ нийтлэлд бид дурддаг
Spring Framework APIs
Хамааралтай тарилга
Quarkus нь хэд хэдэн төрлийг дэмждэг
В
Хүснэгт 2. Дэмжигдсэн Spring DI API-г ашиглах жишээ.
Дэмжигдсэн хаврын DI функцууд
жишээ
Бүтээгч тарилга
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;
}
}
Вэб хүрээ
MicroProfile хэрэглэгчид Quarkus нь JAX-RS, MicroProfile Rest Client, JSON-P, JSON-B-ийг вэб програмчлалын үндсэн загвар болгон дэмждэгт дуртай байх болно. Хаврын хөгжүүлэгчид Quarkus-ийн Spring Web API, ялангуяа REST интерфейсийг дэмжсэнд сэтгэл хангалуун байх болно. Spring DI-тай адил Spring Web API-ийн дэмжлэгийн гол зорилго нь Spring Web API-г MicroProfile API-тай хамт ашиглах боломжийг Spring хөгжүүлэгчдэд олгох явдал юм. Дэмжигдсэн Spring Web API-г хэрхэн ашиглах жишээг Хүснэгт 3-т өгсөн байгаа бөгөөд энэ сэдвийн талаарх дэлгэрэнгүй мэдээлэл, жишээг Quarkus хичээлээс олж болно.
Хүснэгт 3. Дэмжигдсэн Spring Web API-г ашиглах жишээ.
Дэмжигдсэн хаврын вэб функцууд
жишээ
@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) {
...
...
...
}
Хаврын мэдээлэл JPA
MicroProfile хэрэглэгчид Quarkus нь Hibernate ORM ашиглан JPA-г дэмждэгт талархах болно. Хаврын хөгжүүлэгчдэд бас сайн мэдээ байна: Quarkus нь нийтлэг Spring Data JPA тэмдэглэгээ болон төрлийг дэмждэг. Дэмжигдсэн Spring Data JPA API-г ашиглах жишээг 4-р хүснэгтэд үзүүлэв.
В
Хүснэгт 4. Дэмжигдсэн Spring Data JPA API ашиглах жишээ.
Хаврын өгөгдлийн 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 APIs
Алдааг тэсвэрлэх чадвар
Гэмтлийг тэсвэрлэх бүтэц нь шаталсан бүтэлгүйтлээс урьдчилан сэргийлэх, найдвартай микро үйлчилгээний архитектурыг бий болгоход маш чухал юм. Хаврын хөгжүүлэгчид олон жилийн турш алдааг тэсвэрлэхийн тулд таслуур ашиглаж ирсэн.
Хүснэгт 5. Дэмжигдсэн MicroProfile Fault Tolerance API ашиглах жишээ.
MicroProfile-ийн алдааг тэсвэрлэх шинж чанарууд
Тайлбар
жишээ
@Асинхрон
Тусдаа хэлхээнд логикийг гүйцэтгэж байна
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Balkhead
Нэг зэрэг хүсэлт гаргах тоог хязгаарлах
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Ухаалаг алдаатай харьцах, алдааг сэргээх
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Эргэж буцах
Амжилтгүй болсон тохиолдолд өөр логикийг дуудах
@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 хөгжүүлэгчид ихэвчлэн өөрчлөн тохируулсан HealthIndicator болон Spring Boot Actuator ашигладаг. Quarkus-д үүнийг MicroProfile Health ашиглан хийж болох бөгөөд энэ нь анхдагчаар амьд байдлын шалгалт хийдэг боловч амьд байдал болон бэлэн байдлыг нэгэн зэрэг шалгахаар тохируулж болно. Дэмжигдсэн MicroProfile Health API-г хэрхэн ашиглах жишээг Хүснэгт 6-д өгсөн бөгөөд нэмэлт мэдээллийг Quarkus гарын авлагад өгсөн болно.
Хүснэгт 6: Дэмжигдсэн MicroProfile Health API-ийн хэрэглээний жишээ.
MicroProfile эрүүл мэндийн онцлог
Тайлбар
жишээ
@Амьдрал
Платформ нь бүтэлгүйтсэн контейнержүүлсэн програмуудыг дахин ачаалдаг
Төгсгөлийн цэг:
хост:8080/эрүүл мэнд/амьд
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Бэлэн байдал
Платформ нь бэлэн биш бол контейнержүүлсэн програмууд руу траффик илгээхгүй
Төгсгөлийн цэг:
хост:8080/эрүүл мэнд/бэлэн
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Хэмжигдэхүүн
Аппликейшн нь үйл ажиллагааны зорилгоор (гүйцэтгэлийн SLA-г хянах) эсвэл үйл ажиллагааны бус зорилгоор (бизнесийн SLA) хэмжүүрээр хангадаг. Хаврын хөгжүүлэгчид Spring Boot Actuator болон Micrometer ашиглан хэмжүүрүүдийг өгдөг. Хариуд нь Quarkus нь MicroProfile хэмжигдэхүүнийг ашиглан суурь үзүүлэлтүүд (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(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 Client-ийн онцлогууд
Тайлбар
жишээ
@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
Үр дүн
Хаврын хөгжүүлэгчдэд зориулсан энэ блогт бид Java микро үйлчилгээг хөгжүүлэхийн тулд Spring API-уудыг Кваркус дахь MicroProfile API-тай хэрхэн ашиглах, дараа нь тэдгээрийг олон зуун мегабайт RAM хэмнэж, үндсэн хоёртын код болгон хөрвүүлэх талаар хурдан харлаа. миллисекундын асуудал.
Та аль хэдийн ойлгосноор Spring болон MicroProfile API-ийн дэмжлэгийн талаарх дэлгэрэнгүй мэдээлэл болон бусад олон хэрэгтэй мэдээллийг эндээс авах боломжтой.
Эх сурвалж: www.habr.com