เบชเบฐเบเบฒเบเบเบตเบเบธเบเบเบปเบ, เบเบตเปเปเบกเปเบเบเบปเบเบเบงเบฒเบกเบเบตเบชเบฒเบกเปเบเบเบธเบ Quarkus!
เปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบเบฑเบเบเบฐเบเบฒ Java microservices, เบกเบฑเบเบกเบฑเบเบเบฐเปเบเบทเปเบญเบงเปเบฒ
เปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบฅเบฑเบเบเปเบญเบ, เบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบดเปเบเบเบญเบเปเบเบเปเบฅเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเบญเบเบงเบดเบเบตเบเบตเป Quarkus เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ Spring APIs เปเบเบทเปเบญเบชเบฐเปเบเบเปเบซเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒ Spring เบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเป MicroProfile API เปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฐเบเปเบฒเบงเบฑเบเบเบญเบเบเบงเบเปเบเบปเบฒ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบงเบกเปเบญเบปเบฒ MicroProfile APIs, เปเบเบดเปเบเปเบเบฑเบเบเบฐเปเบซเบเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒ Spring เปเบกเบทเปเบญเบชเปเบฒเบ microservices.
เปเบเบฑเบเบซเบเบฑเบ Quarkus? เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเบตเปเปเบกเปเบเบเบฒเบเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบเบชเบปเบ, เบเบฑเปเบเปเบกเปเบ, เบเบฒเบเปเบซเบผเบเบเบทเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบญเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบเปเปเบ MicroProfile API, Spring API เปเบฅเบฐ Java APIs เบญเบทเปเบเป, เปเบเบดเปเบเบเบฐเบเบดเบเบฑเบเบเปเบงเบเบเปเบฒเบชเบฑเปเบเบเบฝเบง: mvn quarkus:dev. เบญเบฑเบเบเบตเบชเบญเบ, เบเบถเบเบชเบฒเบซเบฒเบฅเบทเปเบ
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเปเบเบปเปเบฒเปเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเบเปเบฝเบงเบเบฑเบ MicroProfile, เบเบญเบเบเบฒเบเบเบฐเบเปเบงเบเปเบซเปเบเบนเปเบเบฑเบเบเบฐเบเบฒ Spring เปเบเบปเปเบฒเปเบเบงเบดเบเบตเบเบตเปเปเบเบปเบฒเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป Spring APIs เบเบฑเบ MicroProfile APIs เปเบ Quarkus.
เบเบนเปเบเบญเบเปเบเบเปเบเบต เปเบฅเบฐ Kubernetes
เปเบเบทเปเบญเบฎเบฑเบเบชเบฒเบเบปเบเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเบเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบงเบกเปเบญเบปเบฒเบเบฝเบเปเบเปเบฅเบฑเบเบชเบฐเบเบฐเบฅเบฐเบเบฑเบเบชเบนเบเบเบญเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบขเบนเปเบเบตเปเบเบตเป.
Quarkus เบเบฑเบ
เบชเบธเบเบเปเบฒเบ, เปเบเบเบเบฒเบเบชเบธเบกเปเบชเป Kubernetes เปเบเบฑเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบปเปเบฒเบซเบกเบฒเบ, Quarkus เบเปเปเปเบเปเปเบเปเบเบญเบ Java เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบกเบตเบเบฒเบเบเบฐเบเบดเบเบฑเบเบซเบเปเบฒเบเบตเปเบเปเบฒเบเบเบทเบเบฑเบเปเบเบฅเบฐเบเบฑเบเบเบญเบเปเบเบฅเบฐเบเบฐเบเบญเบก Kubernetes เปเบญเบ. เบเบฒเบเบฐเบฅเบฒเบ 1 เบชเบฐเบซเบเบญเบเปเบเบเบเบตเปเบเบญเบเบเบฒเบเบเบญเบเปเบเปเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบฅเบฐเบซเบงเปเบฒเบ Kubernetes เปเบฅเบฐเบเบญเบ Java เบเบปเปเบงเปเบเบเบตเปเปเบเปเปเบเบเบเบนเปเบเบฑเบเบเบฐเบเบฒ Spring.
เบเบฒเบเบฐเบฅเบฒเบ 1. เปเบเบเบเบตเปเบเบฒเบเบเบดเบเบเปเปเบเบปเบงเบเบฑเบเบฅเบฐเบซเบงเปเบฒเบ Java frameworks เปเบฅเบฐ Kubernetes.
เปเปเบฒ เบเบตเป
เปเบเบตเบเบฅเบฐเบเบนเปเบเปเบกเปเบเบปเปเบเปเบเบเบเบฑเปเบเปเบเบตเบก
Kubernetes
เบเบฒเบโเบเบปเปเบโเบเบปเบโเบเบฒเบโเบเปโเบฅเบดโเบเบฒเบโ
Eureka
DNS
เบเบฒเบเบเบฑเปเบเบเปเบฒ
Spring Cloud Config
เบเบฑเปเบเบเปเบฒเปเบเบเบเบตเป/เบเบงเบฒเบกเบฅเบฑเบ
เบเบฒเบเบเบธเปเบเบเปเบฝเบเบเบฒเบเปเบซเบผเบ
เปเบ (เบเปเบฒเบเบฅเบนเบเบเปเบฒ)
เบเปเบฅเบดเบเบฒเบ, เบเบปเบงเบเบงเบเบเบธเบกเบเบฒเบเบเบณเบฅเบญเบ (เบเปเบฒเบเปเบเบตเบเปเบงเบต)
เบเบฒเบเบฅเบงเบเบฅเบงเบกเปเบฅเบฐเปเบฅเปเบเบฅเบฐเบซเบฑเบเบเบฒเบเบเบปเบงเบขเปเบฒเบ
เปเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบงเบเปเบฎเบปเบฒเบญเปเบฒเบเปเบเบดเบ
Spring Framework APIs
เบเบฒเบเบชเบตเบเบขเบฒเปเบเบดเปเบเบเบฒเบญเบฒเปเบช
Quarkus เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบฅเบฐเบเบฑเบเบเบญเบ
ะ
เบเบฒเบเบฐเบฅเบฒเบ 2. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป Spring DI APIs เบเบตเปเบฎเบญเบเบฎเบฑเบ.
เบเบธเบเบชเบปเบกเบเบฑเบ Spring DI เบเบตเปเบฎเบญเบเบฎเบฑเบ
เบเบปเบงเบขเปเบฒเบ
Constructor Injection
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;
}
}
เบเบญเบเปเบงเบฑเบ
เบเบนเปเปเบเป MicroProfile เบเบฐเบฎเบฑเบเบงเปเบฒ Quarkus เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ JAX-RS, MicroProfile Rest Client, JSON-P, เปเบฅเบฐ JSON-B เปเบเบฑเบเบฎเบนเบเปเบเบเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบกเปเบงเบฑเบเปเบเบเปเบเบปเปเบเบเป. เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบฎเบฝเบ spring เบเบฐเบเปเปเบเบเบฑเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบตเปเบเปเบฒเบเบกเบฒเบเบญเบ Quarkus เบชเปเบฒเบฅเบฑเบ Spring Web API, เปเบเบเบชเบฐเปเบเบฒเบฐเบเบฒเบเปเบเปเบเบญเบ REST. เบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบ Spring DI, เปเบเบปเปเบฒเบซเบกเบฒเบเบเบปเปเบเบเปเบเบญเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ Spring Web API เปเบกเปเบเปเบเบทเปเบญเปเบซเปเบเบนเปเบเบฑเบเบเบฐเบเบฒ Spring เปเบเป Spring Web APIs เบชเบปเบกเบเบปเบเบเบฑเบ MicroProfile APIs. เบเบปเบงเบขเปเบฒเบเบเบญเบเบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเป Spring Web APIs เบเบตเปเปเบเปเบฎเบฑเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเปเบกเปเบเบชเบฐเบซเบเบญเบเปเบซเปเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ 3, เปเบฅเบฐเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเปเบฅเบฐเบเบปเบงเบขเปเบฒเบเบเปเบฝเบงเบเบฑเบเบซเบปเบงเบเปเปเบเบตเปเบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบ Quarkus tutorial เบเบตเปเปเบญเบตเปเบเบงเปเบฒ
เบเบฒเบเบฐเบฅเบฒเบ 3. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป Spring Web APIs เบเบตเปเบฎเบญเบเบฎเบฑเบ.
เบเบธเบเบชเบปเบกเบเบฑเบเปเบงเบฑเบ Spring เบเบตเปเบฎเบญเบเบฎเบฑเบ
เบเบปเบงเบขเปเบฒเบ
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (เบเบฒเบเบชเปเบงเบ)
@GetMapping(path = "/greet/{id}",
produces = "text/plain")
public String greetPerson(
@PathVariable(name = "id") long id) {
...
...
...
}
Spring DataJPA
เบเบนเปเปเบเป MicroProfile เบเบฑเบเบเบฐเบเบทเปเบเบเบปเบกเบเบตเป Quarkus เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ JPA เปเบเบเปเบเป Hibernate ORM. เบเบฑเบเบกเบตเบเปเบฒเบงเบเบตเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒ Spring: Quarkus เบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ Spring Data JPA เบเบปเปเบงเปเบเปเบฅเบฐเบเบฐเปเบเบ. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป Spring Data JPA APIs เบเบตเปเบฎเบญเบเบฎเบฑเบเปเบกเปเบเปเบซเปเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ 4.
ะ
เบเบฒเบเบฐเบฅเบฒเบ 4. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป Spring Data JPA APIs เบเบตเปเบฎเบญเบเบฎเบฑเบ.
เบเบธเบเบชเบปเบกเบเบฑเบ JPA เบเปเปเบกเบนเบเบเบฒเบเบฎเบฝเบ spring เบเบตเปเบฎเบญเบเบฎเบฑเบ
เบเบปเบงเบขเปเบฒเบ
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 {
...
}
เบงเบดเบเบตเบเบฒเบเบชเบญเบเบเบฒเบกเบเบตเปเบกเบฒเบเบฒเบ
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);
}
MicroProfile APIs
เบเบงเบฒเบกเบเบปเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบดเบเบเบฒเบ
เบเบฒเบเบเปเปเบชเปเบฒเบเบเบงเบฒเบกเบเบปเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบดเบเปเบกเปเบเบกเบตเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบญเบเบเบฑเบเบเบงเบฒเบกเบฅเบปเปเบกเปเบซเบผเบงเบเบญเบ cascading เปเบฅเบฐเบเบฒเบเบชเปเบฒเบเบชเบฐเบเบฒเบเบฑเบเบเบฐเบเบฐ microservice เบเบตเปเปเบเบทเปเบญเบเบทเปเบเป. เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบฎเบฝเบ spring เปเบเปเปเบเปเบเบปเบงเบเบฑเบเบงเบปเบเบเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบฒเบเบเปเปเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบฑเบเปเบงเบฅเบฒเบซเบผเบฒเบเบเบต.
เบเบฒเบเบฐเบฅเบฒเบ 5. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป MicroProfile Fault Tolerance APIs เบเบตเปเบฎเบญเบเบฎเบฑเบ.
เบเบธเบเบชเบปเบกเบเบฑเบเบเบงเบฒเบกเบเบปเบเบเบฒเบเบเบงเบฒเบกเบเบดเบเบเบญเบ MicroProfile
เบฅเบฒเบโเบฅเบฐโเบญเบฝเบ
เบเบปเบงเบขเปเบฒเบ
@Asynchronous
เบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบซเบเบเบปเบเปเบเบซเบปเบงเบเปเปเปเบเบเบเปเบฒเบเบซเบฒเบ
@Asynchronous
@Retry
public Future<String> getSalutation() {
...
return future;
}
@Bulkhead
เบเปเบฒเบเบฑเบเบเปเบฒเบเบงเบเบเปเบฒเบฎเปเบญเบเบเปเบเปเบญเบกเปเบเบฑเบ
@Bulkhead(5)
public void fiveConcurrent() {
makeRemoteCall(); //...
}
@CircuitBreaker
เบเบฒเบเบเบฑเบเบเบฒเบเบเบงเบฒเบกเบฅเบปเปเบกเปเบซเบฅเบงเบเบตเปเบชเบฐเบซเบฅเบฒเบเปเบฅเบฐเบเบฒเบเบเบทเปเบเบเบปเบงเบเบฒเบเบเบงเบฒเบกเบฅเบปเปเบกเปเบซเบฅเบง
@CircuitBreaker(delay=500 // milliseconds
failureRatio = .75,
requestVolumeThreshold = 20,
successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
makeRemoteCall(); //...
}
@Fallback
เปเบเบซเบฒเปเบซเบเบเบปเบเบเบฒเบเปเบฅเบทเบญเบเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบฒเบกเบฅเบปเปเบกเปเบซเบผเบง
@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(); //...
}
เบเปเบฅเบดเบเบฒเบเบเบงเบเปเบเบฑเบ (Service Health)
เปเบเบฅเบฐเบเบฐเบเบญเบก Kubernetes เบเบดเบเบเบฒเบกเบชเบธเบเบฐเบเบฒเบเบเบญเบเบเบนเปเบเบญเบเปเบเบเปเบเบตเปเบเบเปเบเปเบเปเบฅเบดเบเบฒเบเบเบดเปเบชเบ. เปเบเบทเปเบญเบญเบฐเบเบธเบเบฒเบเปเบซเปเปเบเบฅเบฐเบเบฐเบเบญเบกเบเบตเปเบเบดเบเบเบฑเบเปเบเบเบฒเบเบเบดเบเบเบฒเบกเบเบฒเบเบเปเบฅเบดเบเบฒเบ, เบเบฑเบเบเบฑเบเบเบฐเบเบฒ Spring เปเบเบเบเบปเบเบเบฐเบเบดเปเบเป HealthIndicator เปเบฅเบฐ Spring Boot Actuator เปเบเบเบเบณเบเบปเบเปเบญเบ. เปเบ Quarkus, เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเปเบเป MicroProfile Health, เปเบเบดเปเบเปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเบฐเปเบฎเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบตเบงเบดเบ, เปเบเปเบชเบฒเบกเบฒเบเบเบฑเปเบเบเปเบฒเปเบเบทเปเบญเบเบงเบเปเบเบดเปเบเบเบงเบฒเบกเบเปเบญเบกเปเบฅเบฐเบเบงเบฒเบกเบเปเบญเบกเบเปเบญเบกเปเบเบฑเบ. เบเบปเบงเบขเปเบฒเบเบเบญเบเบงเบดเบเบตเบเบฒเบเปเบเป MicroProfile Health APIs เบเบตเปเบฎเบญเบเบฎเบฑเบเปเบกเปเบเปเบซเปเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ 6, เปเบฅเบฐเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเปเบกเปเบเปเบซเปเบขเบนเปเปเบเบเบนเปเบกเบท Quarkus
เบเบฒเบเบฐเบฅเบฒเบ 6: โโเบเบปเบงเบขเปเบฒเบเบเบฒเบเบเบณเปเบเปเบเบญเบ MicroProfile Health APIs เบเบตเปเบฎเบญเบเบฎเบฑเบ.
เบเบธเบเบชเบปเบกเบเบฑเบเบชเบธเบเบฐเบเบฒเบเบเบญเบ MicroProfile
เบฅเบฒเบโเบฅเบฐโเบญเบฝเบ
เบเบปเบงเบขเปเบฒเบ
@เบเบตเบงเบดเบ
เปเบเบฅเบเบเบญเบกเบเบดเบเปเบเบตเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบเบฑเบเบเบธเบเบฑเบเบเบธเบเบตเปเบฅเบปเปเบกเปเบซเบฅเบงเบเบทเบเปเปเป
เบเบธเบเบชเบดเปเบเบชเบธเบ:
เปเบเบปเปเบฒเบเบฒเบ: 8080/health/live
@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) เบซเบผเบทเบเบธเบเบเบฐเบชเบปเบเบเบตเปเบเปเปเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบ (SLAs เบเบธเบฅเบฐเบเบดเบ). เบเบฑเบเบเบฑเบเบเบฐเบเบฒเบเบฒเบเบฎเบฝเบ spring เบชเบฐเบซเบเบญเบเบเบฒเบเบงเบฑเบเปเบเบเปเบเบเปเบเป Spring Boot Actuator เปเบฅเบฐ Micrometer. เปเบเบเบฒเบเบเบฑเบเบเบฑเบ, Quarkus เปเบเป MicroProfile Metrics เปเบเบทเปเบญเบชเบฐเบซเบเบญเบเบเบฒเบเบงเบฑเบเปเบเบเบเบทเปเบเบเบฒเบ (JVM เปเบฅเบฐเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบ), metrics เบเบนเปเบเบฒเบ (Quarkus), เปเบฅเบฐเบเบฒเบเบงเบฑเบเปเบเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ. MicroProfile Metrics เบฎเบฝเบเบฎเปเบญเบเปเบซเปเบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ JSON เปเบฅเบฐ OpenMetrics (Prometheus) เบฎเบนเบเปเบเบเบเบปเบเบเบฐเบฅเบดเบ. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป MicroProfile Metrics API เปเบกเปเบเปเบซเปเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ 7.
ะ
เบเบฒเบเบฐเบฅเบฒเบ 7. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเป MicroProfile Metrics APIs.
เบเบธเบเบชเบปเบกเบเบฑเบเบเบฒเบเบงเบฑเบเปเบเบ MicroProfile
เบฅเบฒเบโเบฅเบฐโเบญเบฝเบ
เบเบปเบงเบขเปเบฒเบ
@เบเบฑเบ
เปเบฒเบเปเบเบดเบเบเบปเบงเบเบฑเบเบเบฑเบเบเบณเบเบงเบเบเบฑเปเบเบเบตเปเบงเบฑเบเบเบธเบเบฐเบเบญเบเบเบณเบเบฑเบเบเบฒเบเปเบเปเบเบทเบเปเบญเบตเปเบ
@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
เปเบฒเบเปเบเบดเบเปเบเบฑเบเปเบเบตเบงเบฑเบเปเบเบเบเบตเปเบเบดเบเบเบฒเบกเบเบงเบฒเบกเบเบตเปเบเบฒเบเปเบเบเบญเบเบงเบฑเบเบเบธเบเบตเปเปเบฒเบเปเบซเบ
@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;
}
Metrics Endpoints
เบเบฒเบเบงเบฑเบเปเบเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ
เบเบฒเบเบงเบฑเบเปเบเบเบเบทเปเบเบเบฒเบ
เบเบฒเบเบงเบฑเบเปเบเบเบเบนเปเบเบฒเบ
เบเบฒเบเบงเบฑเบเปเบเบเบเบฑเบเปเบปเบ
เบฅเบนเบเบเปเบฒเบเบฑเบเบเปเบญเบ MicroProfile
Microservices เบกเบฑเบเบเบฐเปเบซเปเบเบธเบเบชเบดเปเบเบชเบธเบ RESTful เบเบตเปเบเปเบญเบเบเบฒเบ API เบฅเบนเบเบเปเบฒเบเบตเปเบชเบญเบเบเปเบญเบเบเบฑเบเปเบเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบ. เปเบเบทเปเบญเปเบเปเบเบธเบเบชเบดเปเบเบชเบธเบ RESTful, เบเบฑเบเบเบฑเบเบเบฐเบเบฒ Spring เปเบเบเบเบปเบเบเบฐเบเบดเปเบเป RestTemplate. Quarkus เบชเบฐเปเบซเบเบต MicroProfile Rest Client APIs เปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเป, เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเปเบซเปเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบ 8.
ะ
เบเบฒเบเบฐเบฅเบฒเบ 8. เบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเปเบเป MicroProfile Rest Client APIs.
เบเบธเบเบชเบปเบกเบเบฑเบเบฅเบนเบเบเปเบฒเบเบฑเบเบเปเบญเบ MicroProfile
เบฅเบฒเบโเบฅเบฐโเบญเบฝเบ
เบเบปเบงเบขเปเบฒเบ
@RegisterRestClient
เบฅเบปเบเบเบฐเบเบฝเบเบเบฒเบเปเบเปเบเบญเบ Java เบเบตเปเบเบดเบกเปเบเบฑเบเบฅเบนเบเบเปเบฒเบ REST
@RegisterRestClient
@Path("/")
public interface MyRestClient {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSalutation();
}
@RestClient
เปเบฒเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบชเปเบงเบเบเบดเบเบเปเปเบฅเบนเบเบเปเบฒ REST เบเบตเปเบเบดเบก
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
Invocation
เปเบเบซเบฒเบเบธเบเบชเบดเปเบเบชเบธเบ REST
System.out.println(
restClient.getSalutation());
mp-rest/url
เบฅเบฐเบเบธเบเบธเบเบชเบดเปเบเบชเบธเบ REST
application.properties:
org.example.MyRestClient/mp-rest/url=
http://localhost:8081/myendpoint
เบเบปเบเปเบเปเบฎเบฑเบ
เปเบ blog เบเบตเป, เบกเบตเบเบธเบเบเบฐเบชเบปเบเบเบปเปเบเบเปเปเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒ Spring, เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบดเปเบเบขเปเบฒเบเปเบงเบงเบฒเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเปเบฒเปเบเป Spring APIs เบเบฑเบ MicroProfile APIs เปเบ Quarkus เปเบเบทเปเบญเบเบฑเบเบเบธเบ Java microservices เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบฅเบงเบเบฅเบงเบกเบเบงเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเบฅเบฐเบซเบฑเบเบเบฒเบเบชเบญเบเบเบตเปเบเปเบงเบเบเบฐเบขเบฑเบ RAM เบซเบผเบฒเบเบฎเปเบญเบ megabytes เปเบฅเบฐเปเบเบตเบเบเบปเบงเปเบ เบเบฑเบเบซเบฒเบเบญเบ milliseconds.
เบเบฑเปเบเบเบตเปเบเปเบฒเบเปเบเบปเปเบฒเปเบเปเบฅเปเบง, เบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบ Spring เปเบฅเบฐ MicroProfile APIs, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเปเปเบกเบนเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเบญเบทเปเบเป, เบชเบฒเบกเบฒเบเบเบปเบเปเบเปเปเบ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com