అందరికీ హలో, క్వార్కస్ సిరీస్లో మూడవ పోస్ట్ ఇదిగోండి!
జావా మైక్రోసర్వీస్లను అభివృద్ధి చేస్తున్నప్పుడు, ఇది తరచుగా నమ్ముతారు
కొంచెం వివరంగా చెప్పాలంటే, స్ప్రింగ్ డెవలపర్లు తమ రోజువారీ పనిలో మైక్రోప్రొఫైల్ APIని ఎలా ఉపయోగించాలో చూపించడానికి Quarkus Spring APIలకు ఎలా మద్దతిస్తుందనే దాని స్కోప్ మరియు వివరాలను మేము ముందుగా పరిశీలిస్తాము. మైక్రోసర్వీస్లను సృష్టించేటప్పుడు స్ప్రింగ్ డెవలపర్లకు ఉపయోగపడే మైక్రోప్రొఫైల్ APIలను మేము కవర్ చేస్తాము.
క్వార్కస్ ఎందుకు? ముందుగా, ఇది ప్రత్యక్ష కోడింగ్, అంటే మైక్రోప్రొఫైల్ API, స్ప్రింగ్ API మరియు ఇతర జావా APIలలో ఏవైనా మార్పులను ఆటోమేటిక్గా రీలోడ్ చేయడం, ఇది కేవలం ఒకే ఒక కమాండ్తో నిర్వహించబడుతుంది: mvn quarkus:dev. రెండవది, లో చర్చించబడింది
Quarkusలో మైక్రోప్రొఫైల్ APIలతో స్ప్రింగ్ APIలను ఎలా ఉపయోగించవచ్చో స్ప్రింగ్ డెవలపర్లకు అర్థం చేసుకోవడంలో సహాయపడటానికి కాకుండా మైక్రోప్రొఫైల్ గురించి మేము వివరంగా చెప్పము.
కంటైనర్లు మరియు కుబెర్నెట్స్
ఈ కథనాన్ని సరళంగా ఉంచడానికి, మేము ఇక్కడ మద్దతు యొక్క ఉన్నత-స్థాయి అంశాలను మాత్రమే కవర్ చేస్తాము.
క్వార్కస్ కూడా
చివరగా, కుబెర్నెట్లను టార్గెట్ డిప్లాయ్మెంట్ ఎన్విరాన్మెంట్గా ఫోకస్ చేయడం ద్వారా, క్వార్కస్ జావా ఫ్రేమ్వర్క్లను కుబెర్నెటెస్ ప్లాట్ఫారమ్ స్థాయిలోనే ఇలాంటి కార్యాచరణ అమలు చేయబడిన సందర్భాల్లో ఉపయోగించదు. టేబుల్ 1 కుబెర్నెట్స్ మరియు స్ప్రింగ్ డెవలపర్లు ఉపయోగించే సాధారణ జావా ఫ్రేమ్వర్క్ల మధ్య ఫంక్షనల్ కరస్పాండెన్స్ యొక్క మ్యాప్ను అందిస్తుంది.
పట్టిక 1. జావా ఫ్రేమ్వర్క్లు మరియు కుబెర్నెట్స్ మధ్య ఫంక్షనల్ కరస్పాండెన్స్ యొక్క మ్యాప్.
ఫంక్షనల్
సాంప్రదాయ స్ప్రింగ్ బూట్
Kubernetes
సేవ ఆవిష్కరణ
యురేకా
DNS
ఆకృతీకరణ
స్ప్రింగ్ క్లౌడ్ కాన్ఫిగర్
మ్యాప్స్/రహస్యాలను కాన్ఫిగర్ చేయండి
లోడ్ బ్యాలెన్సింగ్
రిబ్బన్ (క్లయింట్ వైపు)
సర్వీస్, రెప్లికేషన్ కంట్రోలర్ (సర్వర్ వైపు)
ఉదాహరణ నుండి కోడ్ను కంపైల్ చేయడం మరియు అమలు చేయడం
ఈ వ్యాసంలో మేము సూచిస్తాము
స్ప్రింగ్ ఫ్రేమ్వర్క్ APIలు
డిపెండెన్సీ ఇంజెక్షన్
క్వార్కస్ పరిధికి మద్దతు ఇస్తుంది
В
పట్టిక 2. మద్దతు ఉన్న స్ప్రింగ్ 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;
}
}
వెబ్ ఫ్రేమ్వర్క్
ప్రాథమిక వెబ్ ప్రోగ్రామింగ్ మోడల్గా క్వార్కస్ JAX-RS, మైక్రోప్రొఫైల్ రెస్ట్ క్లయింట్, JSON-P మరియు JSON-Bలకు మద్దతు ఇస్తుందని మైక్రోప్రొఫైల్ వినియోగదారులు ఇష్టపడతారు. స్ప్రింగ్ వెబ్ API, ప్రత్యేకించి REST ఇంటర్ఫేస్లకు క్వార్కస్ ఇటీవలి మద్దతుతో స్ప్రింగ్ డెవలపర్లు సంతోషిస్తారు. స్ప్రింగ్ DI మాదిరిగానే, స్ప్రింగ్ వెబ్ API మద్దతు యొక్క ప్రధాన లక్ష్యం స్ప్రింగ్ డెవలపర్లను మైక్రోప్రొఫైల్ APIలతో కలిపి స్ప్రింగ్ వెబ్ APIలను ఉపయోగించడాన్ని ప్రారంభించడం. మద్దతు ఉన్న స్ప్రింగ్ వెబ్ APIలను ఎలా ఉపయోగించాలో ఉదాహరణలు టేబుల్ 3లో అందించబడ్డాయి మరియు ఈ అంశంపై మరింత సమాచారం మరియు ఉదాహరణలను క్వార్కస్ ట్యుటోరియల్లో చూడవచ్చు
పట్టిక 3. మద్దతు ఉన్న స్ప్రింగ్ వెబ్ APIలను ఉపయోగించడం యొక్క ఉదాహరణలు.
మద్దతు ఉన్న స్ప్రింగ్ వెబ్ ఫీచర్లు
ఉదాహరణలు
@రెస్ట్కంట్రోలర్
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@పోస్ట్ మ్యాపింగ్
@పుట్మ్యాపింగ్
@Delete మ్యాపింగ్
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@పాత్ వేరియబుల్
@కుకీ విలువ
@RequestBody
@రెస్పాన్స్ స్టేటస్
@ఎక్సెప్షన్ హ్యాండ్లర్
@RestControllerAdvice (పాక్షికం)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
స్ప్రింగ్ డేటా JPA
హైబర్నేట్ ORMని ఉపయోగించి క్వార్కస్ JPAకి మద్దతు ఇస్తుందని మైక్రోప్రొఫైల్ వినియోగదారులు కూడా అభినందిస్తారు. స్ప్రింగ్ డెవలపర్లకు శుభవార్త కూడా ఉంది: క్వార్కస్ సాధారణ స్ప్రింగ్ డేటా JPA ఉల్లేఖనాలు మరియు రకాలకు మద్దతు ఇస్తుంది. మద్దతు ఉన్న స్ప్రింగ్ డేటా JPA APIలను ఉపయోగించే ఉదాహరణలు టేబుల్ 4లో ఇవ్వబడ్డాయి.
В
పట్టిక 4. మద్దతు ఉన్న స్ప్రింగ్ డేటా JPA APIలను ఉపయోగించడం యొక్క ఉదాహరణలు.
మద్దతు ఉన్న స్ప్రింగ్ డేటా JPA ఫీచర్లు
ఉదాహరణలు
క్రూడ్ రిపోజిటరీ
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
రిపోజిటరీ
Jpa రిపోజిటరీ
పేజింగ్ మరియు సార్టింగ్ రిపోజిటరీ
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);
}
మైక్రోప్రొఫైల్ APIలు
తప్పు సహనం
క్యాస్కేడింగ్ వైఫల్యాలను నివారించడానికి మరియు విశ్వసనీయ మైక్రోసర్వీస్ నిర్మాణాలను రూపొందించడానికి ఫాల్ట్ టాలరెన్స్ నిర్మాణాలు చాలా ముఖ్యమైనవి. స్ప్రింగ్ డెవలపర్లు చాలా సంవత్సరాలుగా తప్పు సహనం కోసం సర్క్యూట్-బ్రేకర్లను ఉపయోగిస్తున్నారు.
పట్టిక 5. మద్దతు ఉన్న మైక్రోప్రొఫైల్ ఫాల్ట్ టోలరెన్స్ APIలను ఉపయోగించే ఉదాహరణలు.
మైక్రోప్రొఫైల్ ఫాల్ట్ టాలరెన్స్ ఫీచర్లు
వివరణ
ఉదాహరణలు
@అసమకాలిక
ప్రత్యేక థ్రెడ్లో లాజిక్ని అమలు చేయడం
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@బల్క్ హెడ్
ఏకకాల అభ్యర్థనల సంఖ్యను పరిమితం చేయండి
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@సర్క్యూట్ బ్రేకర్
స్మార్ట్ వైఫల్య నిర్వహణ మరియు వైఫల్యాల నుండి రికవరీ
@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 ప్లాట్ఫారమ్లు ప్రత్యేక సేవలను ఉపయోగించి కంటైనర్ల ఆరోగ్యాన్ని పర్యవేక్షిస్తాయి. సేవలను పర్యవేక్షించడానికి అంతర్లీన ప్లాట్ఫారమ్ను అనుమతించడానికి, స్ప్రింగ్ డెవలపర్లు సాధారణంగా కస్టమ్ హెల్త్ఇండికేటర్ మరియు స్ప్రింగ్ బూట్ యాక్యుయేటర్ను ఉపయోగిస్తారు. క్వార్కస్లో, మైక్రోప్రొఫైల్ హెల్త్ని ఉపయోగించి ఇది చేయవచ్చు, ఇది డిఫాల్ట్గా లైవ్నెస్ చెక్ను నిర్వహిస్తుంది, అయితే లైవ్నెస్ మరియు సంసిద్ధతను ఏకకాలంలో తనిఖీ చేయడానికి కాన్ఫిగర్ చేయవచ్చు. మద్దతు ఉన్న మైక్రోప్రొఫైల్ హెల్త్ APIలను ఎలా ఉపయోగించాలో ఉదాహరణలు టేబుల్ 6లో అందించబడ్డాయి మరియు అదనపు సమాచారం క్వార్కస్ మాన్యువల్లో అందించబడింది
టేబుల్ 6: మద్దతు ఉన్న మైక్రోప్రొఫైల్ హెల్త్ APIల వినియోగ ఉదాహరణలు.
మైక్రోప్రొఫైల్ ఆరోగ్య లక్షణాలు
వివరణ
ఉదాహరణలు
@జీవనం
ప్లాట్ఫారమ్ విఫలమైన కంటెయినరైజ్డ్ అప్లికేషన్లను రీబూట్ చేస్తుంది
ముగింపు స్థానం:
హోస్ట్: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లు) కొలమానాలను అందిస్తాయి. స్ప్రింగ్ డెవలపర్లు స్ప్రింగ్ బూట్ యాక్యుయేటర్ మరియు మైక్రోమీటర్ ఉపయోగించి కొలమానాలను అందిస్తారు. ప్రతిగా, క్వార్కస్ బేస్లైన్ మెట్రిక్లు (JVM మరియు ఆపరేటింగ్ సిస్టమ్), వెండర్ మెట్రిక్లు (క్వార్కస్) మరియు అప్లికేషన్ మెట్రిక్లను అందించడానికి మైక్రోప్రొఫైల్ మెట్రిక్లను ఉపయోగిస్తుంది. మైక్రోప్రొఫైల్ మెట్రిక్లకు అమలు JSON మరియు OpenMetrics (Prometheus) అవుట్పుట్ ఫార్మాట్లకు మద్దతివ్వడం అవసరం. మైక్రోప్రొఫైల్ మెట్రిక్స్ APIని ఉపయోగించే ఉదాహరణలు టేబుల్ 7లో ఇవ్వబడ్డాయి.
В
పట్టిక 7. మైక్రోప్రొఫైల్ మెట్రిక్స్ APIలను ఉపయోగించడం యొక్క ఉదాహరణలు.
మైక్రోప్రొఫైల్ మెట్రిక్స్ ఫీచర్లు
వివరణ
ఉదాహరణలు
@లెక్కించబడింది
ఉల్లేఖన వస్తువు ఎన్నిసార్లు కాల్ చేయబడిందో లెక్కించే కౌంటర్ కౌంటర్ని సూచిస్తుంది
@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;
}
మెట్రిక్స్ ముగింపు పాయింట్లు
అప్లికేషన్ కొలమానాలు
ప్రాథమిక కొలమానాలు
విక్రేత కొలమానాలు
అన్ని కొలమానాలు
మైక్రోప్రొఫైల్ రెస్ట్ క్లయింట్
మైక్రోసర్వీస్లు తరచుగా RESTful ముగింపు బిందువులను అందిస్తాయి, వాటికి సంబంధిత క్లయింట్ APIలు పని చేయాల్సి ఉంటుంది. RESTful ముగింపు పాయింట్లను ఉపయోగించడానికి, స్ప్రింగ్ డెవలపర్లు సాధారణంగా RestTemplateని ఉపయోగిస్తారు. క్వార్కస్ ఈ సమస్యను పరిష్కరించడానికి మైక్రోప్రొఫైల్ రెస్ట్ క్లయింట్ APIలను అందిస్తుంది, వీటి ఉపయోగం యొక్క ఉదాహరణలు టేబుల్ 8లో ఇవ్వబడ్డాయి.
В
టేబుల్ 8. మైక్రోప్రొఫైల్ రెస్ట్ క్లయింట్ APIలను ఉపయోగించడం యొక్క ఉదాహరణలు.
మైక్రోప్రొఫైల్ రెస్ట్ క్లయింట్ ఫీచర్లు
వివరణ
ఉదాహరణలు
@RegisterRestClient
టైప్ చేసిన జావా ఇంటర్ఫేస్ను REST క్లయింట్గా నమోదు చేస్తుంది
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@రెస్ట్ క్లయింట్
టైప్ చేసిన 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
ఫలితాలు
ఈ బ్లాగ్లో, ప్రధానంగా స్ప్రింగ్ డెవలపర్లను లక్ష్యంగా చేసుకుని, జావా మైక్రోసర్వీస్లను డెవలప్ చేయడానికి క్వార్కస్లోని మైక్రోప్రొఫైల్ APIలతో స్ప్రింగ్ APIలను ఎలా ఉపయోగించాలో మేము శీఘ్రంగా పరిశీలించాము మరియు వాటిని స్థానిక బైనరీ కోడ్గా కంపైల్ చేయండి, అది వందల మెగాబైట్ల RAMని ఆదా చేస్తుంది మరియు ప్రారంభించబడుతుంది మిల్లీసెకన్ల విషయం.
మీరు ఇప్పటికే అర్థం చేసుకున్నట్లుగా, స్ప్రింగ్ మరియు మైక్రోప్రొఫైల్ APIలకు మద్దతు గురించి మరింత సమాచారం, అలాగే చాలా ఇతర ఉపయోగకరమైన సమాచారాన్ని కనుగొనవచ్చు
మూలం: www.habr.com