Sannu kowa, ga rubutu na uku a cikin jerin Quarkus!
Lokacin haɓaka microservices na Java, galibi ana yarda da hakan
A cikin ɗan ƙarin daki-daki, za mu fara duba iyawa da cikakkun bayanai na yadda Quarkus ke tallafawa APIs na bazara don nunawa masu haɓaka bazara yadda ake amfani da MicroProfile API a cikin ayyukansu na yau da kullun. Sannan za mu rufe MicroProfile APIs, waɗanda ke da amfani ga masu haɓaka lokacin bazara lokacin ƙirƙirar ƙananan sabis.
Me yasa Quarkus? Da fari dai, wannan ita ce rikodin rikodin kai tsaye, wato, sake lodi ta atomatik na kowane canje-canje a cikin MicroProfile API, Spring API da sauran APIs Java, waɗanda aka yi da umarni ɗaya kawai: mvn quarkus:dev. Na biyu, la'akari a
Ba za mu yi cikakken bayani game da MicroProfile ba, ban da don taimakawa masu haɓaka bazara su fahimci yadda za su iya amfani da APIs na bazara tare da MicroProfile APIs a cikin Quarkus.
Kwantena da Kubernetes
Don kiyaye wannan labarin mai sauƙi, za mu rufe babban matakin tallafi kawai a nan.
Quarkus kuma
A ƙarshe, ta hanyar mayar da hankali kan Kubernetes a matsayin mahallin ƙaddamar da manufa, Quarkus baya amfani da tsarin Java a lokuta inda aka aiwatar da irin wannan aiki a matakin dandalin Kubernetes kanta. Tebu 1 yana ba da taswirar aikin wasiku tsakanin Kubernetes da tsarin Java na yau da kullun da masu haɓaka bazara ke amfani da su.
Tebur 1. Taswirar wasiƙun aiki tsakanin tsarin Java da Kubernetes.
Aiki
Boot na bazara na gargajiya
Kubernetes
Gano sabis
Eureka
DNS
Kanfigareshan
Tsarin Cloud Cloud
Sanya Taswirori/Asiri
Load daidaita
Ribbon (bangaren abokin ciniki)
Sabis, Mai sarrafa Maimaitawa (bangaren uwar garken)
Haɗawa da gudanar da code daga misalin
A cikin wannan labarin mun koma zuwa
APIs Framework na bazara
Allurar Dogaro
Quarkus yana goyan bayan kewayon
В
Tebura 2. Misalai na amfani da APIs na Spring DI masu goyan bayan.
Goyan bayan Fasalolin DI na bazara
misalai
Allurar gini
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Allurar fili
@Autowired
@RestClient
SalutationRestClient salutationRestClient;
@Value("${fallbackSalutation}")
String fallbackSalutation;
@Configuration
@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;
}
}
Tsarin Yanar Gizo
Masu amfani da MicroProfile za su ƙaunaci cewa Quarkus yana goyan bayan JAX-RS, Abokin Hulɗa na MicroProfile, JSON-P, da JSON-B a matsayin ƙirar shirye-shiryen yanar gizo na farko. Masu haɓaka lokacin bazara za su ji daɗin goyan bayan Quarkus na kwanan nan don API ɗin Gidan Yanar Gizon bazara, musamman musaya na REST. Mai kama da Spring DI, babban burin tallafin Gidan Yanar Gizo na Spring shine don baiwa masu haɓaka lokacin bazara damar amfani da APIs na Gidan Yanar Gizo na bazara tare da MicroProfile APIs. Ana ba da misalan yadda ake amfani da APIs masu goyan bayan Spring Web APIs, kuma ana iya samun ƙarin bayani da misalai kan wannan batu a cikin koyawa ta Quarkus da ake kira.
Tebura 3. Misalai na amfani da APIs na Gidan Yanar Gizo na bazara mai goyan bayan.
Goyan bayan Abubuwan Yanar Gizo na bazara
misalai
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@Request Header
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (bangare)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Bayanan Bayani na JPA
Masu amfani da MicroProfile kuma za su yaba cewa Quarkus yana goyan bayan JPA ta amfani da Hibernate ORM. Hakanan akwai labari mai daɗi ga masu haɓaka lokacin bazara: Quarkus yana goyan bayan bayanan bayanan bazara na yau da kullun na JPA da nau'ikan. Misalai na amfani da goyan bayan bayanan bazara JPA APIs ana bayar da su a cikin Tebur 4.
В
Tebur 4. Misalai na amfani da goyan bayan bayanan bazara JPA APIs.
Fasalolin JPA Bayanan Lokacin bazara
misalai
Rubutun Rubutun
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
mangaza
JpaRepository
Rukunin Rubutun Rubuce-Rubuce daSarting
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Rubutun Ma'ajiya
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Hanyoyin tambaya da aka samo
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Ƙayyadaddun tambayoyin mai amfani
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);
}
APIs na MicroProfile
Haƙuri na kuskure
Gina haƙurin kuskure yana da matukar mahimmanci don hana lalacewar lalacewa da ƙirƙirar amintattun gine-ginen microservice. Masu haɓaka lokacin bazara sun kasance suna amfani da na'urorin da'ira don haƙurin kuskure shekaru da yawa.
Tebur 5. Misalai na amfani da goyon bayan MicroProfile Fault Tolerance APIs.
Abubuwan Hakuri Laifin MicroProfile
Description
misalai
@Asynchronous
Yin aiwatar da dabaru a cikin wani zare daban
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Iyakance adadin buƙatun lokaci guda
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Smart gazawar handling da murmurewa daga kasawa
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Faduwa
Kira madadin dabaru idan akwai gazawa
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Sake gwada gazawar nema
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ƙarshen lokacin sarrafa gazawa
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Ayyukan Dubawa (Kiwon Lafiyar Sabis)
Kubernetes dandamali suna lura da lafiyar kwantena ta amfani da ayyuka na musamman. Don ba da damar dandamalin da ke ƙasa don sa ido kan ayyuka, masu haɓaka bazara yawanci suna amfani da Alamar Lafiya ta al'ada da Boot Actuator na bazara. A cikin Quarkus, ana iya yin wannan ta amfani da MicroProfile Health, wanda ta tsohuwa yana yin rajistan rayuwa, amma ana iya saita shi don bincika rayuwa da shirye-shiryen lokaci guda. Ana bayar da misalan yadda ake amfani da API ɗin Kiwon Lafiyar MicroProfile da ke goyan baya a cikin Tebur 6, kuma an bayar da ƙarin bayani a cikin littafin Quarkus.
Tebur 6: Misalai na amfani na APIs Lafiyar Ƙwararrun Ƙwararru masu goyan bayan.
Fasalolin Lafiyar MicroProfile
Description
misalai
@Rayuwa
Dandali yana sake kunna aikace-aikacen da ba su cika kwantena ba
Ƙarshe:
Mai watsa shiri: 8080/lafiya/rayuwa
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Shirya
Dandalin ba zai aika da zirga-zirga zuwa aikace-aikacen kwantena ba idan ba a shirya ba
Ƙarshe:
mai watsa shiri: 8080 / lafiya / shirye
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Ma'auni
Aikace-aikace suna ba da ma'auni don dalilai na aiki (don saka idanu akan SLAs) ko dalilai marasa aiki (SLAs kasuwanci). Masu haɓaka bazara suna ba da awo ta amfani da Spring Boot Actuator da Micrometer. Bi da bi, Quarkus yana amfani da MicroProfile Metrics don samar da ma'auni na asali (JVM da tsarin aiki), ma'aunin mai siyarwa (Quarkus), da ma'aunin aikace-aikace. MicroProfile Metrics yana buƙatar aiwatarwa yana goyan bayan tsarin fitarwa na JSON da OpenMetrics (Prometheus). Ana bayar da misalan amfani da Ma'aunin Ma'auni na MicroProfile a cikin Tebu 7.
В
Tebur 7. Misalai na amfani da Ma'aunin Ma'auni na MicroProfile APIs.
Fasalolin Ma'auni na Ƙira
Description
misalai
@ ƙidaya
Yana nuna ma'auni mai ƙidayar adadin lokutan da aka kira abin da aka rubuta
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Yana nuna ma'aunin ma'auni wanda ke ƙidaya adadin kira na lokaci ɗaya zuwa abin da aka bayyana
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gaba
Yana nuna firikwensin ma'aunin ma'auni wanda ke auna ƙimar abin da aka tantance
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Mita
Yana nuna firikwensin mita wanda ke lura da mitar kira na abin da aka tantance
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Bayanin da ke ɗauke da bayanai game da metadata lokacin da aka karɓi buƙatun shigar ko samar da awo
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Yana nuna mai ƙidayar lokaci mai bin diddigin lokacin bayanin abu
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Ma'aunin Ƙarshen Ƙarshen
Ma'aunin aikace-aikace
Ma'auni na asali
Ma'aunin mai siyarwa
Duk ma'auni
Abokin Ragowar MicroProfile
Microservices galibi suna ba da madaidaitan wuraren ƙarewa waɗanda ke buƙatar API ɗin abokin ciniki daidai don aiki da su. Don amfani da wuraren ƙarshe na RESTful, masu haɓaka bazara yawanci suna amfani da RestTemplate. Quarkus yana ba da APIs na Abokin Hulɗa na MicroProfile don magance wannan matsalar, an ba da misalan amfani da su a cikin Tebur 8.
В
Table 8. Misalai na amfani da MicroProfile Rest Client APIs.
Fasalolin Abokin Ciniki na MicroProfile
Description
misalai
@RegisterRestClient
Yana yin rijistar ƙirar Java da aka buga azaman abokin ciniki na REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@Client
Alamar aiwatar da misalin nau'in mu'amalar abokin ciniki na REST
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Kira
Yana kiran wurin ƙarshen REST
System.out.println(
restClient.getSalutation());
mp-rest/url
Yana ƙayyade ƙarshen ƙarshen REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Sakamakon
A cikin wannan rukunin yanar gizon, wanda aka yi niyya da farko ga masu haɓaka lokacin bazara, mun ɗauki saurin duba yadda ake amfani da APIs na bazara tare da APIs MicroProfile a cikin Quarkus don haɓaka microservices na Java sannan a haɗa su zuwa lambar binary na asali wanda ke adana ɗaruruwan megabyte na RAM kuma ya ƙaddamar a ciki. al'amari na millise seconds.
Kamar yadda kuka riga kuka fahimta, ana iya samun ƙarin bayani game da tallafi ga Spring da MicroProfile APIs, da kuma sauran bayanai masu yawa masu amfani, a ciki
source: www.habr.com