Mhoroi mose, heino chinyorwa chechitatu muQuarkus nhevedzano!
Paunenge uchigadzira Java microservices, inowanzo tenda izvozvo
Mune zvimwe zvishoma, isu tichatanga tatarisa chiyero uye ruzivo rwekuti Quarkus inotsigira sei Spring APIs kuratidza vanogadzira Chitubu mashandisiro eiyo MicroProfile API mubasa ravo rezuva nezuva. Zvadaro tichavhara iyo MicroProfile APIs, iyo inobatsira kune vanogadzira Spring kana vachigadzira microservices.
Sei Quarks? Chekutanga, uku ndiko kukodha mhenyu, ndiko kuti, kurodha otomatiki kwechero shanduko muMicroProfile API, Spring API uye mamwe maJava APIs, ayo anoitwa nemurairo mumwe chete: mvn quarkus:dev. Chechipiri, inofungidzirwa mukati
Hatisi kuzopinda mune zvakadzama nezve MicroProfile, kunze kwekubatsira vanogadzira Spring kuti vanzwisise mashandisiro avangaita Spring APIs neMicroProfile APIs muQuarkus.
Containers uye Kubernetes
Kuchengeta chinyorwa ichi chiri nyore, isu tinongovhara iyo yepamusoro-nhanho maficha erutsigiro pano.
Quarcus zvakare
Chekupedzisira, nekutarisa Kubernetes senzvimbo yekuendesa inotangwa, Quarkus haishandise Java masisitimu mumamiriro ezvinhu apo kushanda kwakafanana kunoitwa padanho reKubernetes papuratifomu pachayo. Tafura 1 inopa mepu yekunyorerana kunoshanda pakati peKubernetes uye yakajairwa Java masimusi anoshandiswa nevanogadzira Spring.
Tafura 1. Mepu yekunyorerana kunoshanda pakati peJava maitiro uye Kubernetes.
Inoshanda
Traditional Spring Boot
Kubernetes
Kuwanikwa kwesevhisi
Eureka
DNS
Configuration
Spring Cloud Config
Gadzirisa Mepu/Zvakavanzika
Kutakura zviyero
Ribhoni (divi revatengi)
Sevhisi, Replication Controller (server side)
Kunyora uye kushandisa kodhi kubva pamuenzaniso
Munyaya ino tinotaura nezvazvo
Spring Framework APIs
Kuvimbika jekiseni
Quarks inotsigira huwandu hwe
Π
Tafura 2. Mienzaniso yekushandisa inotsigirwa Spring DI APIs.
Inotsigirwa Spring DI Zvimiro
mienzaniso
Constructor Jekiseni
public PersonSpringController(
PersonSpringRepository personRepository, // injected
PersonSpringMPService personService) { // injected
this.personRepository = personRepository;
this.personService = personService;
}
Munda Jekiseni
@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;
}
}
Web framework
Vashandisi veMicroProfile vachada kuti Quarkus inotsigira JAX-RS, MicroProfile Rest Client, JSON-P, uye JSON-B seyekutanga webhu dhizaini modhi. Vagadziri veSpring vachafadzwa neQuarkus 'ichangoburwa rutsigiro rweSpring Web API, kunyanya REST interfaces. Zvakafanana neChirimo DI, chinangwa chikuru cheSpring Web API rutsigiro ndechekugonesa vanogadzira Spring kushandisa Spring Web APIs pamwe chete neMicroProfile APIs. Mienzaniso yemashandisiro eiyo inotsigirwa yeSpring Web APIs inopihwa muTafura 3, uye rumwe ruzivo nemienzaniso pane iyi nyaya inogona kuwanikwa muQuarkus tutorial inonzi.
Tafura 3. Mienzaniso yekushandisa inotsigirwa Spring Web APIs.
Inotsigirwa Spring Web Features
mienzaniso
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (chikamu)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
Vashandisi veMicroProfile vanozofarirawo kuti Quarkus inotsigira JPA vachishandisa Hibernate ORM. Kune zvakare nhau dzakanaka dzevagadziri veChitubu: Quarkus inotsigira zvakajairika Spring Data JPA zvirevo uye marudzi. Mienzaniso yekushandisa inotsigirwa Spring Data JPA APIs inopihwa muTebhu 4.
Π
Tafura 4. Mienzaniso yekushandisa inotsigirwa Spring Data JPA APIs.
Inotsigirwa Spring Data JPA Zvimiro
mienzaniso
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Repository
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends
Repository {
Person save(Person entity);
Optional findById(Person entity);
}
Repository Fragments
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
Nzira dzekubvunza dzakatorwa
public interface PersonRepository extends CrudRepository {
List findByName(String name);
Person findByNameBySsn(String ssn);
Optional
findByNameBySsnIgnoreCase(String ssn);
Boolean existsBookByYearOfBirthBetween(
Integer start, Integer end);
}
Mibvunzo yakatsanangurwa nemushandisi
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
Kushivirira mhosva
Kukanganisa kushivirira kuvaka kwakakosha kwazvo kudzivirira kutadza kutadza uye kugadzira yakavimbika microservice architecture. Vagadziri vechirimo vanga vachishandisa masekete-vanopwanya kushivirira kukanganisa kwemakore mazhinji.
Tafura 5. Mienzaniso yekushandisa inotsigirwa MicroProfile Fault Tolerance APIs.
MicroProfile Fault Tolerance Features
tsananguro
mienzaniso
@Asynchronous
Kuita pfungwa mune imwe shinda
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
Deredza nhamba yezvikumbiro panguva imwe chete
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
Smart kutadza kubata uye kupora kubva mukukundikana
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
Kudaidza imwe pfungwa kana yatadza
@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
public String fallback() {
return "hello";
}
Edzazve pakukumbira kukundikana
@Retry(maxRetries=3)
public String getSalutation() {
makeRemoteCall(); //...
}
Kutadza kudzora nguva
@Timeout(value = 500 ) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
Kutarisa masevhisi (Hutano hweSevhisi)
Kubernetes mapuratifomu anotarisisa hutano hwemidziyo uchishandisa akakosha masevhisi. Kubvumidza iri pasi pepuratifomu yekutarisa masevhisi, Vagadziri veChirimo vanowanzo shandisa tsika HealthIndicator uye Spring Boot Actuator. MuQuarkus, izvi zvinogona kuitwa uchishandisa MicroProfile Health, iyo nekusarudzika inoita cheki yehupenyu, asi inogona kugadzirwa kuti panguva imwe chete itarise kurarama uye kugadzirira. Mienzaniso yemashandisirwo eiyo MicroProfile Health APIs inotsigirwa inopihwa muTable 6, uye rumwe ruzivo rwunopihwa muQuarkus manual.
Tafura 6: Mienzaniso yekushandisa inotsigirwa MicroProfile Health APIs.
MicroProfile Health features
tsananguro
mienzaniso
@Liveness
Iyo platform inotangazve yakundikana zvikumbiro zvemukati
Endpoint:
muenzi:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
public HealthCheckResponse call() {
...
return HealthCheckResponse
.named("myHCProbe")
.status(ready ? true:false)
.withData("mydata", data)
.build();
}
@Kugadzirira
Iyo puratifomu haitumire traffic kune yakamisikidzwa zvikumbiro kana isati yagadzirira
Endpoint:
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();
}
Metrics
Zvishandiso zvinopa metrics ezvimwe zvinangwa zvekushanda (kutarisa mashandiro eSLA) kana zvisiri zvekushanda (bhizinesi SLAs). Vagadziri vechirimo vanopa metric vachishandisa Spring Boot Actuator uye Micrometer. Nekudaro, Quarkus inoshandisa MicroProfile Metrics kupa baseline metrics (JVM uye inoshanda sisitimu), mutengesi metrics (Quarkus), uye application metrics. MicroProfile Metrics inoda kuti kuita kunotsigira JSON uye OpenMetrics (Prometheus) mafomati ekubuda. Mienzaniso yekushandisa iyo MicroProfile Metrics API inopihwa muTafura 7.
Π
Tafura 7. Mienzaniso yekushandisa MicroProfile Metrics APIs.
MicroProfile Metrics Zvimiro
tsananguro
mienzaniso
@Counted
Zvinoreva kaunda inoverenga nhamba yenguva yakadanwa chinhu chine chirevo
@Counted(name = "fallbackCounter",
displayName = "Fallback Counter",
description = "Fallback Counter")
public String salutationFallback() {
return fallbackSalutation;
}
@ConcurrentGauge
Rinonongedza geji inoverenga nhamba dzekufona panguva imwe chete kuchinhu chine chirevo
@ConcurrentGuage(
name = "fallbackConcurrentGauge",
displayName="Fallback Concurrent",
description="Fallback Concurrent")
public String salutationFallback() {
return fallbackSalutation;
}
@Gauge
Zvinoreva geji sensor inoyera kukosha kwechinhu chakatsanangurwa
@Metered(name = "FallbackGauge",
displayName="Fallback Gauge",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
@Metered
Zvinoreva meter sensor inotarisisa frequency yekufona kwechinhu chakatsanangurwa
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Chirevo chine ruzivo nezve metadata kana chikumbiro chagamuchirwa chekupinda kana kugadzira metric
@Metric
@Metered(name = "MeteredFallback",
displayName="Metered Fallback",
description="Fallback frequency")
public String salutationFallback() {
return fallbackSalutation;
}
Inoratidza chibatiso chenguva chinoteedzera nguva yechinhu chakanyorwa
@Timed(name = "TimedFallback",
displayName="Timed Fallback",
description="Fallback delay")
public String salutationFallback() {
return fallbackSalutation;
}
Metrics Endpoints
Maitiro ekushandisa
Basic metrics
Vendor metrics
Metrics ese
MicroProfile Zorora Mutengi
Microservices dzinowanzopa RESTful magumo ayo anoda anowirirana mutengi APIs kushanda nawo. Kushandisa RESTful endpoints, Vagadziri veSpring vanowanzo shandisa RestTemplate. Quarkus inopa MicroProfile Rest Client APIs kugadzirisa dambudziko iri, mienzaniso yekushandisa iyo yakapihwa muTafura 8.
Π
Tafura 8. Mienzaniso yekushandisa MicroProfile Rest Client APIs.
MicroProfile Rest Client Features
tsananguro
mienzaniso
@RegisterRestClient
Inonyoresa Java interface semutengi weREST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
Inocherekedza kuitwa kwechiitiko chetaipa REST mutengi interface
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Kukumbira
Inodaidza REST magumo
System.out.println(
restClient.getSalutation());
mp-rest/url
Inotsanangura REST magumo
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
Migumisiro
Mune ino blog, yakanangana zvakanyanya nevagadziri veChirimo, takatarisa nekukurumidza mashandisiro eSpring APIs neMicroProfile APIs muQuarkus kugadzira Java microservices tobva tazviunganidza mumabhanari kodhi inochengetedza mazana emamegabytes e RAM uye kutanga mukati. nyaya yemamilliseconds.
Sezvawatonzwisisa, rumwe ruzivo nezve rutsigiro rweChitubu uye MicroProfile APIs, pamwe nerumwe ruzivo rwakawanda runobatsira, runogona kuwanikwa mukati.
Source: www.habr.com