ሰላም ለሁላችሁ፣ የኳርኩስ ተከታታዮች ሦስተኛው ልጥፍ ይኸውና!
የጃቫ ማይክሮ ሰርቪስ ሲገነቡ, ብዙ ጊዜ ይታመናል
በጥቂቱ በዝርዝር፣ በመጀመሪያ የፀደይ ገንቢዎች የማይክሮ ፕሮፋይል ኤፒአይን በዕለት ተዕለት ስራቸው እንዴት እንደሚጠቀሙ ለማሳየት ኳርኩስ የስፕሪንግ ኤፒአይዎችን እንዴት እንደሚደግፍ ወሰን እና ዝርዝሮችን እንመለከታለን። ከዚያ ማይክሮፕሮፋይል ኤፒአይዎችን እንሸፍናለን፣ ይህም ለፀደይ ገንቢዎች ማይክሮ አገልግሎቶችን ሲፈጥሩ ጠቃሚ ነው።
ለምን ቋርኩስ? በመጀመሪያ፣ ይህ የቀጥታ ኮድ ማድረግ ነው፣ ይህም ማለት በማይክሮፕሮፋይል ኤፒአይ፣ ስፕሪንግ ኤፒአይ እና ሌሎች የጃቫ ኤፒአይዎች ውስጥ ያሉ ማናቸውንም ለውጦች በራስ ሰር ዳግም መጫን ነው፣ ይህም የሚከናወነው በአንድ ትዕዛዝ ብቻ ነው፡ mvn quarkus:dev. በሁለተኛ ደረጃ, ውስጥ ተብራርቷል
የስፕሪንግ ገንቢዎች በኳርኩስ ውስጥ ከማይክሮ ፕሮፋይል ኤፒአይዎች ጋር የስፕሪንግ ኤፒአይዎችን እንዴት መጠቀም እንደሚችሉ እንዲረዱ ከማገዝ ውጭ ስለ ማይክሮ ፕሮፋይል በዝርዝር አንናገርም።
ኮንቴይነሮች እና Kubernetes
ይህን ጽሑፍ ቀላል ለማድረግ፣ ከፍተኛ ደረጃ ያለውን የድጋፍ ገጽታዎች እዚህ ላይ ብቻ እንሸፍናለን።
ኳርኩስም እንዲሁ
በመጨረሻም፣ በኩበርኔትስ ላይ እንደ ዒላማ ማሰማሪያ አካባቢ በማተኮር፣ ኳርኩስ የጃቫ ማዕቀፎችን አይጠቀምም ተመሳሳይ ተግባር በኩበርኔትስ መድረክ እራሱ በሚተገበርበት ጊዜ። ሠንጠረዥ 1 በኩበርኔትስ እና በስፕሪንግ ገንቢዎች በሚጠቀሙት የተለመዱ የጃቫ ማዕቀፎች መካከል ያለውን ተግባራዊ የደብዳቤ ልውውጥ ካርታ ያቀርባል።
ሠንጠረዥ 1. በጃቫ ማዕቀፎች እና በኩበርኔትስ መካከል የተግባራዊ ደብዳቤዎች ካርታ.
ተግባራዊ
ባህላዊ የፀደይ ቡት
ኩባንያቶች
የአገልግሎት ግኝት
ዩሬካ
ዲ ኤን ኤስ
ውቅር
የፀደይ ክላውድ ውቅር
ካርታዎችን/ምስጢሮችን ያዋቅሩ
ጭነት ጭነት
ሪባን (የደንበኛ ጎን)
አገልግሎት፣ ማባዛት ተቆጣጣሪ (የአገልጋይ ጎን)
ከምሳሌው ላይ ኮዱን በማሰባሰብ እና በማሄድ ላይ
በዚህ ጽሑፍ ውስጥ እንጠቅሳለን
የፀደይ መዋቅር ኤፒአይዎች
የጥገኛ መርፌ
ኳርኩስ የተለያዩ ነገሮችን ይደግፋል
В
ሠንጠረዥ 2. የሚደገፉትን የፀደይ DI ኤፒአይዎችን የመጠቀም ምሳሌዎች።
የሚደገፉ የፀደይ 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;
}
}
የድር መዋቅር
የማይክሮ ፕሮፋይል ተጠቃሚዎች Quarkus JAX-RS፣ MicroProfile Rest Client፣ JSON-P እና JSON-Bን እንደ ዋና የድር ፕሮግራሚንግ ሞዴል መደገፉን ይወዳሉ። የስፕሪንግ ገንቢዎች የኳርኩስ የቅርብ ጊዜ ድጋፍ ለፀደይ ድር ኤፒአይ በተለይም የREST በይነገጽ ይደሰታሉ። ከSፕሪንግ DI ጋር በሚመሳሰል መልኩ፣ የስፕሪንግ ድር ኤፒአይ ድጋፍ ዋና ግብ የስፕሪንግ ገንቢዎች ከማይክሮፕሮፋይል ኤፒአይዎች ጋር በመተባበር የስፕሪንግ ድር ኤፒአይዎችን እንዲጠቀሙ ማስቻል ነው። የሚደገፉትን የስፕሪንግ ዌብ ኤፒአይዎችን እንዴት መጠቀም እንደሚቻል ምሳሌዎች በሰንጠረዥ 3 ውስጥ ቀርበዋል፣ እና በዚህ ርዕስ ላይ ተጨማሪ መረጃ እና ምሳሌዎች በሚባለው የኳርኩስ አጋዥ ስልጠና ውስጥ ይገኛሉ።
ሠንጠረዥ 3. የሚደገፉትን የስፕሪንግ ድር ኤፒአይዎችን የመጠቀም ምሳሌዎች።
የሚደገፉ የጸደይ ድር ባህሪያት
ምሳሌዎች
@ restController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@Mapping ሰርዝ
@PatchMapping
@RequestParam
@ጥያቄ ርዕስ
@Matrix ተለዋዋጭ
@PathVariable
@CookieValue
@RequestBody
@የመልስ ሁኔታ
@ExceptionHandler
@RestControllerAdvice (ከፊል)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
የፀደይ ውሂብ JPA
የማይክሮ ፕሮፋይል ተጠቃሚዎች Quarkus Hibernate ORMን በመጠቀም JPAን እንደሚደግፍ ያደንቃሉ። ለስፕሪንግ ገንቢዎች ጥሩ ዜናም አለ፡ ኳርኩስ የተለመዱ የፀደይ ዳታ JPA ማብራሪያዎችን እና አይነቶችን ይደግፋል። የሚደገፈው የፀደይ መረጃ JPA APIs የመጠቀም ምሳሌዎች በሰንጠረዥ 4 ውስጥ ተሰጥተዋል።
В
ሠንጠረዥ 4. የሚደገፉ የፀደይ ውሂብ JPA APIs የመጠቀም ምሳሌዎች።
የሚደገፉ የፀደይ ውሂብ JPA ባህሪዎች
ምሳሌዎች
ክሩድ ሪፖዚቶሪ
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
የማጠራቀሚያ
JpaRepository
ገጽ እና መደርደር ማከማቻ
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);
}
የማይክሮ ፕሮፋይል ኤፒአይዎች
ስህተትን መታገስ
የስህተት መቻቻል ግንባታዎች ብልሽቶችን ለመከላከል እና አስተማማኝ የማይክሮ አገልግሎት አርክቴክቸር ለመፍጠር በጣም አስፈላጊ ናቸው። የስፕሪንግ ገንቢዎች ለብዙ አመታት ለስህተት መቻቻል ወረዳ-መከላከያዎችን ሲጠቀሙ ቆይተዋል።
ሠንጠረዥ 5. የሚደገፉ የማይክሮ ፕሮፋይል ስህተት መቻቻል ኤፒአይዎችን የመጠቀም ምሳሌዎች።
የማይክሮ ፕሮፋይል ስህተት መቻቻል ባህሪዎች
መግለጫ
ምሳሌዎች
@ አልተመሳሰልም።
በተለየ ክር ውስጥ ሎጂክን ማስፈጸም
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
በአንድ ጊዜ የሚደረጉ ጥያቄዎችን ብዛት ይገድቡ
@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(); //...
}
የፍተሻ አገልግሎቶች (የአገልግሎት ጤና)
የኩበርኔትስ መድረኮች ልዩ አገልግሎቶችን በመጠቀም የእቃዎችን ጤና ይቆጣጠራሉ. ከስር ያለው መድረክ አገልግሎቶችን እንዲከታተል ለመፍቀድ፣ የፀደይ ገንቢዎች በተለምዶ ብጁ HealthIndicator እና Spring Boot Actuator ይጠቀማሉ። በኳርኩስ ይህ የማይክሮ ፕሮፋይል ጤናን በመጠቀም ሊከናወን ይችላል ፣ይህም በነባሪ የአኗኗር ፍተሻን ያከናውናል ፣ ግን በተመሳሳይ ጊዜ ህያውነትን እና ዝግጁነትን ለመፈተሽ ሊዋቀር ይችላል። የሚደገፉትን የማይክሮ ፕሮፋይል ጤና ኤፒአይዎችን እንዴት መጠቀም እንደሚቻል ምሳሌዎች በሰንጠረዥ 6 ቀርበዋል እና ተጨማሪ መረጃ በኳርኩስ መመሪያ ቀርቧል።
ሠንጠረዥ 6፡ የሚደገፉ የማይክሮ ፕሮፋይል ጤና ኤፒአይዎች አጠቃቀም ምሳሌዎች።
የማይክሮፕሮፋይል ጤና ባህሪዎች
መግለጫ
ምሳሌዎች
@ሕያውነት
መድረኩ ያልተሳኩ በመያዣ የተያዙ መተግበሪያዎችን ዳግም ያስጀምራቸዋል።
የመጨረሻ ነጥብ፡-
አስተናጋጅ: 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();
}
መለኪያዎች
አፕሊኬሽኖች ለአሰራር አላማዎች (የስራ ክንዋኔዎችን ለመቆጣጠር) ወይም ላልተሰራ አላማዎች (የንግድ SLAs) መለኪያዎችን ይሰጣሉ። የፀደይ ገንቢዎች Spring Boot Actuator እና ማይክሮሜትር በመጠቀም መለኪያዎችን ይሰጣሉ። በተራው፣ ኳርኩስ የመነሻ መለኪያዎችን (JVM እና ስርዓተ ክወና)፣ የአቅራቢ መለኪያዎችን (ኳርኩስ) እና የመተግበሪያ መለኪያዎችን ለማቅረብ የማይክሮ ፕሮፋይል መለኪያዎችን ይጠቀማል። የማይክሮ ፕሮፋይል ሜትሪክስ አተገባበሩ JSON እና OpenMetrics (Prometheus) የውጤት ቅርጸቶችን እንዲደግፍ ይፈልጋል። የማይክሮ ፕሮፋይል ሜትሪክስ ኤፒአይን የመጠቀም ምሳሌዎች በሰንጠረዥ 7 ውስጥ ተሰጥተዋል።
В
ሠንጠረዥ 7. የማይክሮ ፕሮፋይል ሜትሪክስ ኤፒአይዎችን የመጠቀም ምሳሌዎች።
የማይክሮ ፕሮፋይል መለኪያዎች ባህሪዎች
መግለጫ
ምሳሌዎች
@ተቆጥሯል።
አንድ የተብራራ ነገር የተጠራበትን ጊዜ የሚቆጥር ቆጣሪ ቆጣሪን ያመለክታል
@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 የመጨረሻ ነጥቦችን ይሰጣሉ። RESTful የመጨረሻ ነጥቦችን ለመጠቀም የፀደይ ገንቢዎች በተለምዶ RestTemplateን ይጠቀማሉ። Quarkus ይህንን ችግር ለመፍታት የማይክሮ ፕሮፋይል እረፍት ደንበኛ ኤፒአይዎችን ያቀርባል፣ የአጠቃቀም ምሳሌዎች በሰንጠረዥ 8 ተሰጥተዋል።
В
ሠንጠረዥ 8. የማይክሮ ፕሮፋይል እረፍት ደንበኛ ኤፒአይዎችን የመጠቀም ምሳሌዎች።
የማይክሮ ፕሮፋይል እረፍት ደንበኛ ባህሪዎች
መግለጫ
ምሳሌዎች
@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 የመጨረሻ ነጥብ ይገልጻል
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
ውጤቶች
በዋናነት በስፕሪንግ ገንቢዎች ላይ ያነጣጠረ በዚህ ብሎግ የJava ማይክሮ አገልገሎቶችን ለማዳበር እና በመቀጠል በመቶዎች የሚቆጠሩ ሜጋባይት ራም የሚቆጥብ እና የሚጀምርበትን የፀደይ ኤፒአይዎችን ከማይክሮ ፕሮፋይል ኤፒአይዎች ጋር በኳርኩስ እንዴት መጠቀም እንደሚቻል በፍጥነት ተመልክተናል። የሚሊሰከንዶች ጉዳይ።
አስቀድመው እንደተረዱት፣ ስለ ስፕሪንግ እና የማይክሮ ፕሮፋይል ኤፒአይዎች ድጋፍ እና እንዲሁም ሌሎች ብዙ ጠቃሚ መረጃዎችን በተመለከተ ተጨማሪ መረጃ በ ውስጥ ይገኛሉ።
ምንጭ: hab.com