Halo a h-uile duine, seo an treas post san t-sreath Quarkus!
Nuair a bhios tu a’ leasachadh microservices Java, thathas gu tric a’ creidsinn sin
Ann am beagan nas mionaidiche, bheir sinn sùil an-toiseach air farsaingeachd agus mion-fhiosrachadh air mar a tha Quarkus a’ toirt taic do Spring APIs gus sealltainn do luchd-leasachaidh an Earraich mar a chleachdas iad an MicroProfile API nan obair làitheil. An uairsin còmhdaichidh sinn na MicroProfile APIs, a tha feumail do luchd-leasachaidh an Earraich nuair a bhios iad a’ cruthachadh microservices.
Carson a tha Quarkus? An toiseach, is e còdadh beò a tha seo, is e sin, ath-luchdachadh gu fèin-ghluasadach air atharrachaidhean sam bith anns an MicroProfile API, Spring API agus Java API eile, a thèid a dhèanamh le dìreach aon àithne: mvn quarkus: dev. San dara h-àite, beachdachadh ann an
Cha tèid sinn a-steach gu mion-fhiosrachadh mu MicroProfile, ach a-mhàin gus luchd-leasachaidh an Earraich a chuideachadh a’ tuigsinn mar as urrainn dhaibh Spring APIs a chleachdadh le APIan MicroProfile ann an Quarkus.
Containers agus Kubernetes
Gus an artaigil seo a chumail sìmplidh, cha bhith sinn a’ còmhdach ach na taobhan àrd-ìre de thaic an seo.
Quarkus cuideachd
Mu dheireadh, le bhith ag amas air Kubernetes mar an àrainneachd cleachdadh targaid, cha bhith Quarkus a’ cleachdadh frèaman Java ann an cùisean far a bheil gnìomhachd coltach ris air a chuir an gnìomh aig ìre àrd-ùrlar Kubernetes fhèin. Tha Clàr 1 a’ toirt seachad mapa den chonaltradh gnìomh eadar Kubernetes agus frèaman àbhaisteach Java a bhios luchd-leasachaidh an Earraich a’ cleachdadh.
Clàr 1. Mapa de chonaltradh gnìomhail eadar frèaman Java agus Kubernetes.
Gnìomh
Boot traidiseanta an earraich
Kubernetes
Lorg seirbheis
Eureka
DNS
Configuration
Spring Cloud Config
Mapaichean rèiteachaidh / dìomhaireachd
Luchdaich cothromachadh
Ribbon (taobh teachdaiche)
Seirbheis, Rianadair Mac-samhail (taobh an fhrithealaiche)
A’ cur ri chèile agus a’ ruith a’ chòd bhon eisimpleir
Anns an artaigil seo tha sinn a 'toirt iomradh
APIs Spring Framework
Injection eisimeileachd
Tha Quarkus a’ toirt taic do raon de
В
Clàr 2. Eisimpleirean de bhith a 'cleachdadh APIan Spring DI le taic.
Feartan DI Spring le taic
eisimpleirean
In-stealladh constructor
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
In-stealladh achaidh
@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;
}
}
Am frèam lìn
Is toil le luchd-cleachdaidh MicroProfile gu bheil Quarkus a’ toirt taic do JAX-RS, MicroProfile Rest Client, JSON-P, agus JSON-B mar am prìomh mhodail prògramadh lìn. Bidh luchd-leasachaidh an earraich toilichte le taic Quarkus o chionn ghoirid airson Spring Web API, gu sònraichte eadar-aghaidh REST. Coltach ri Spring DI, is e prìomh amas taic Spring Web API leigeil le luchd-leasachaidh Spring Web APIs a chleachdadh ann an co-bhonn ri MicroProfile APIs. Tha eisimpleirean air mar a chleachdas tu na APIan Spring Web le taic rim faighinn ann an Clàr 3, agus gheibhear tuilleadh fiosrachaidh agus eisimpleirean air a’ chuspair seo anns an oideachadh Quarkus ris an canar
Clàr 3. Eisimpleirean de bhith a' cleachdadh APIan Spring Web le taic.
Feartan lìn Earrach le taic
eisimpleirean
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@Iarrtas Param
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@Làmhair eisgeachd
@RestControllerAdvice (pàirt)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Dàta an Earraich JPA
Tuigidh luchd-cleachdaidh MicroProfile cuideachd gu bheil Quarkus a’ toirt taic do JPA a’ cleachdadh an Hibernate ORM. Tha deagh naidheachd ann cuideachd do luchd-leasachaidh an Earraich: tha Quarkus a’ toirt taic do notaichean agus seòrsachan cumanta Spring Data JPA. Tha eisimpleirean de bhith a’ cleachdadh na APIan Spring Data JPA le taic air an toirt seachad ann an Clàr 4.
В
Clàr 4. Eisimpleirean de bhith a' cleachdadh APIan JPA Data Spring le taic.
Feartan JPA Dàta Earrach le taic
eisimpleirean
Stòr-tasgaidh Crud
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Stòrlann
JpaRepository
Stòras PagingAndSorting
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Fragannan tasgaidh
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Modhan ceist stèidhichte
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Ceistean air an sònrachadh leis an neach-cleachdaidh
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);
}
APIan MicroProfile
Fulangas sgàinidh
Tha togail fulangas sgàinidhean glè chudromach airson casg a chuir air fàilligeadh casg agus cruthachadh ailtireachd microservice earbsach. Tha luchd-leasachaidh an earraich air a bhith a’ cleachdadh luchd-brisidh airson fulangas sgàinidhean airson grunn bhliadhnaichean.
Clàr 5. Eisimpleirean de bhith a’ cleachdadh APIan MicroProfile Fault Tolerance le taic.
Feartan fulangas sgàineadh MicroProfile
Tuairisgeul
eisimpleirean
@asyncronach
Cur an gnìomh loidsig ann an snàithlean fa leth
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Cuir crìoch air an àireamh de dh'iarrtasan aig an aon àm
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Làimhseachadh fàilligeadh glic agus faighinn seachad air fàilligidhean
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Tuiteam air ais
A 'gairm loidsig eile ma dh'fhàilligeas
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Feuch a-rithist ma dh’ fhàillig iarrtas
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Ùine smachd air dìth
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Seirbheisean sgrùdaidh (Seirbheis Slàinte)
Bidh àrd-ùrlaran Kubernetes a’ cumail sùil air slàinte shoithichean a’ cleachdadh seirbheisean sònraichte. Gus leigeil leis an àrd-ùrlar bunaiteach sùil a chumail air seirbheisean, mar as trice bidh luchd-leasachaidh an Earraich a’ cleachdadh HealthIndicator àbhaisteach agus Spring Boot Actuator. Ann an Quarkus, faodar seo a dhèanamh le bhith a’ cleachdadh MicroProfile Health, a bhios gu gnàthach a’ dèanamh sgrùdadh beòthalachd, ach faodar a rèiteachadh gus sùil a thoirt air beòthalachd agus deisealachd aig an aon àm. Tha eisimpleirean de mar a chleachdas tu na APIan MicroProfile Health le taic rim faighinn ann an Clàr 6, agus tha fiosrachadh a bharrachd air a thoirt seachad ann an leabhar-làimhe Quarkus
Clàr 6: Eisimpleirean cleachdaidh de APIan MicroProfile Health le taic.
Feartan slàinte MicroProfile
Tuairisgeul
eisimpleirean
@beòthalachd
Bidh an àrd-ùrlar ag ath-thòiseachadh thagraidhean soithich a dh’ fhàillig
Ceann-uidhe:
aoigheachd: 8080 / slàinte / beò
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@readness
Cha chuir an àrd-ùrlar trafaic gu tagraidhean gleidhidh mura h-eil e deiseil
Ceann-uidhe:
aoigheachd: 8080 / slàinte / deiseil
@Readiness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(live ? true:false)
.withData("mydata", data)
.build();
}
Meatrics
Bidh tagraidhean a’ toirt seachad meatrach airson adhbharan obrachaidh (gus sùil a chumail air SLAn dèanadais) no adhbharan neo-ghnìomhach (SLAn gnìomhachais). Bidh luchd-leasachaidh an earraich a’ toirt seachad meatrach a’ cleachdadh Spring Boot Actuator agus Micrometer. An uair sin, bidh Quarkus a’ cleachdadh MicroProfile Metrics gus meatrach bun-loidhne (JVM agus siostam obrachaidh), metrics reiceadair (Quarkus), agus metrics tagraidh a thoirt seachad. Tha MicroProfile Metrics ag iarraidh gum bi am buileachadh a’ toirt taic do chruthan toraidh JSON agus OpenMetrics (Prometheus). Tha eisimpleirean de bhith a’ cleachdadh an MicroProfile Metrics API air an toirt seachad ann an Clàr 7.
В
Clàr 7. Eisimpleirean de bhith a 'cleachdadh MicroProfile Metrics APIs.
Feartan MicroProfile Metrics
Tuairisgeul
eisimpleirean
@Cunntadh
A’ comharrachadh cuntair a tha a’ cunntadh na h-uimhir de thursan a chaidh rud le notaichean a ghairm
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
A’ comharrachadh slat-tomhais a tha a’ cunntadh an àireamh de ghlaodhan co-aontach gu nì le notaichean
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gabhadh
A’ comharrachadh sensor tomhais a bhios a’ tomhas luach nì le notaichean
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@meadhanach
A’ comharrachadh sensor meatair a bhios a’ cumail sùil air tricead gairm nì le notaichean
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Nota anns a bheil fiosrachadh mu mheata-dàta nuair a gheibhear iarrtas airson meatrach a chur a-steach no a thoirt gu buil
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
A’ comharrachadh timer a bhios a’ cumail sùil air fad nì le notaichean
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Puingean crìochnachaidh metrics
Meudan tagraidh
Meudan bunaiteach
Meatairean reiceadair
A h-uile metrics
Neach-dèiligidh Rest MicroProfile
Bidh microservices gu tric a’ toirt seachad puingean crìochnachaidh RESTful a dh’ fheumas APIan teachdaiche co-fhreagarrach obrachadh leotha. Gus puingean crìochnachaidh RESTful a chleachdadh, mar as trice bidh luchd-leasachaidh an earraich a’ cleachdadh RestTemplate. Bidh Quarkus a’ tabhann MicroProfile Rest Client APIs gus an duilgheadas seo fhuasgladh, agus tha eisimpleirean de chleachdadh air an toirt seachad ann an Clàr 8.
В
Clàr 8. Eisimpleirean de bhith a 'cleachdadh MicroProfile Rest Client APIs.
Feartan neach-dèiligidh MicroProfile Rest
Tuairisgeul
eisimpleirean
@RegisterRestClient
A’ clàradh eadar-aghaidh clò-sgrìobhte Java mar neach-dèiligidh REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
A’ comharrachadh buileachadh eisimpleir de eadar-aghaidh teachdaiche REST clò-bhuailte
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Gabhail a-steach
A’ gairm puing crìochnachaidh REST
System.out.println(
restClient.getSalutation());
mp-fois/url
Sònraich puing crìochnachaidh REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Builean
Anns a’ bhlog seo, ag amas gu sònraichte air luchd-leasachaidh an Earraich, thug sinn sùil aithghearr air mar a chleachdas sinn Spring APIs leis na MicroProfile APIs ann an Quarkus gus microservices Java a leasachadh agus an uairsin gan cur ri chèile ann an còd binary dùthchasach a shàbhalas ceudan de mhegabytes de RAM agus a chuir air bhog a-steach. cùis milliseconds.
Mar a thuig thu mu thràth, gheibhear barrachd fiosrachaidh mu thaic airson API Spring and MicroProfile, a bharrachd air tòrr fiosrachaidh feumail eile, ann an
Source: www.habr.com