αžšαž”αŸ€αž”αžŠαŸ‚αž› Quarkus αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžšαžœαžΆαž„ MicroProfile αž“αž·αž„ Spring

αž‡αŸ†αžšαžΆαž”αžŸαž½αžšαž’αŸ’αž“αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆ αž“αŸαŸ‡αž‡αžΆαž”αŸ’αžšαž€αžΆαžŸαž‘αžΈαž”αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸŠαŸαžšαžΈ Quarkus!

αžšαž”αŸ€αž”αžŠαŸ‚αž› Quarkus αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαžšαžœαžΆαž„ MicroProfile αž“αž·αž„ Spring

αž“αŸ…αž–αŸαž›αž’αž—αž·αžœαžŒαŸ’αž Java microservices αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž‡αžΏαžαžΆαž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž–αž„αž€αŸ’αžšαž–αžΎαž˜αžΈαž€αŸ’αžšαžΌαž αŸ’αžœαžΈαž ΠΈ αžŸαŸ’αž”αŸ‚αž€αž‡αžΎαž„αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ αž‚αžΊαž‡αžΆ APIs αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž“αž·αž„αž―αž€αžšαžΆαž‡αŸ’αž™αŸ” αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αžΆαž“αž‘αŸ†αž“αŸ„αžšαž”αŸ’αžšαžΎ APIs αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αŸ’αž›αžΆαž”αŸ‹αž”αŸ’αžšαžΎαžšαž½αž…αž αžΎαž™ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαžšαŸ€αž“αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒαžαŸ’αž˜αžΈ αž“αž·αž„αžŸαž˜αžΆαžŸαž’αžΆαžαž»αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αŸ” αžαŸ’αž„αŸƒαž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αžŸαž˜αŸ’αžšαž½αž›αžŠαž›αŸ‹αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αŸƒαž€αžΆαžšαž–αŸαž‰αž“αž·αž™αž˜αž˜αž½αž™αž…αŸ†αž“αž½αž“ MicroProfile API αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž αžΎαž™αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎ Spring API αž“αž·αž„αž˜αž»αžαž„αžΆαžšαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžαŸ’αž˜αžΈαŸ—αž€αŸ’αž“αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΆαž›αž‚αŸ’αž“αžΆαŸ” αžƒαžΊαž€.

αž“αŸ…αž€αŸ’αž“αž»αž„αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαž·αž… αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžœαž·αžŸαžΆαž›αž—αžΆαž– αž“αž·αž„αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› Quarkus αž‚αžΆαŸ†αž‘αŸ’αžš Spring APIs αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ MicroProfile API αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž„αžΆαžšαž”αŸ’αžšαž…αžΆαŸ†αžαŸ’αž„αŸƒαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž™αžΎαž„αž“αžΉαž„αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹ MicroProfile APIs αžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαž microservicesαŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆ Quarkus? αž‘αžΈαž˜αž½αž™ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαž”αž“αŸ’αžαž•αŸ’αž‘αžΆαž›αŸ‹ αž–αŸ„αž›αž‚αžΊαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αžΌαžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ MicroProfile API, Spring API αž“αž·αž„ Java APIs αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαŸ‚αž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ– mvn quarkus:dev αŸ” αž‘αžΈαž–αžΈαžšαž–αž·αž…αžΆαžšαžŽαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž”αž»αž‚αŸ’αž‚αž› (αžŠαŸ‚αž›αž…αž„αž€αŸ’αžšαž„αž–αžΈ Spring, MicroProfile, αž“αž·αž„ JPA APIs αž‘αŸ…αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– GraalVM ដើម) αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αžαŸ’αžšαžΉαž˜αžαŸ‚ 0.055 αžœαž·αž“αžΆαž‘αžΈ αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ RAM αž”αŸ’αžšαž αŸ‚αž› 90 MB (RSS) αž“αŸ…αž›αžΎαž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ RESTful αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αžαž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαŸ‚αž˜αž½αž™αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡: αž€αž‰αŸ’αž…αž”αŸ‹ mvn -Pnative αŸ”

αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈ MicroProfile αž‘αŸ αž€αŸ’αžšαŸ…αž–αžΈαž‡αž½αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž±αŸ’αž™αž™αž›αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αžΆαž…αž”αŸ’αžšαžΎ Spring APIs αž‡αžΆαž˜αž½αž™ MicroProfile APIs αž“αŸ…αž€αŸ’αž“αž»αž„ Quarkus αŸ”

αž€αž»αž„αžαžΊαž“αŸαžš αž“αž·αž„ Kubernetes

αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž±αŸ’αž™αžŸαžΆαž˜αž‰αŸ’αž‰ αž™αžΎαž„αž“αžΉαž„αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αžαŸ‚αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ” Kubernetesαž–αŸ’αžšαŸ„αŸ‡αžœαžΆαžŸαŸ†αžαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αŸ” Quarkus αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αžΆαž‡αž„αŸ‹ Java αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Kubernetes αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž“αž·αž„αž–αŸαž›αžœαŸαž›αžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ Java αž αžΎαž™αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž”αž„αŸ’αž€αžΎαž“αžŠαž„αŸ‹αžŸαŸŠαžΈαžαŸαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αž·αž„αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αžŸαžšαž»αž”αŸ”

Quarkus αž•αž„αžŠαŸ‚αžšαŸ” αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž’αž“αž’αžΆαž“ αž“αž·αž„αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž‡αžΌαž“ Kubernetes αž˜αž‚αŸ’αž‚αž»αž‘αŸαžŸαž€αŸ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ Kubernetes αž“αž·αž„ Red Hat OpenShift αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ Quarkus αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αžΌαžœαž―αž€αžŸαžΆαžš Dockerfile.jvm (JVM packaging) αž“αž·αž„ Dockerfile.native (native binary packaging) αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž’αž»αž„αŸ”

αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αžŠαŸ„αž™αž•αŸ’αžαŸ„αžαž›αžΎ Kubernetes αž‡αžΆαž”αžšαž·αž™αžΆαž€αžΆαžŸαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‚αŸ„αž›αžŠαŸ… Quarkus αž˜αž·αž“αž”αŸ’αžšαžΎαž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒ Java αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αž˜αŸ’αžšαž·αžαž“αŸƒαžœαŸαž‘αž·αž€αžΆ Kubernetes αžαŸ’αž›αž½αž“αž―αž„αŸ” αžαžΆαžšαžΆαž„αž‘αžΈ 1 αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž•αŸ‚αž“αž‘αžΈαž“αŸƒαž€αžΆαžšαž†αŸ’αž›αžΎαž™αž†αŸ’αž›αž„αž˜αž»αžαž„αžΆαžšαžšαžœαžΆαž„ Kubernetes αž“αž·αž„αž€αŸ’αžšαž”αžαŸαžŽαŸ’αžŒ Java αž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαŸ„αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αŸ”

αžαžΆαžšαžΆαž„αž‘αžΈ 1. αž•αŸ‚αž“αž‘αžΈαž“αŸƒαž€αžΆαžšαž†αŸ’αž›αžΎαž™αž†αŸ’αž›αž„αž˜αž»αžαž„αžΆαžšαžšαžœαžΆαž„ Java frameworks αž“αž·αž„ Kubernetes αŸ”

αž˜αž»αžαž„αžΆαžšαŸ”
αžŸαŸ’αž”αŸ‚αž€αž‡αžΎαž„αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœαž”αŸ’αžšαž–αŸƒαžŽαžΈ
Kubernetes

αž€αžΆαžšαžšαž€αžƒαžΎαž‰αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜
ធ៊ូរី
αžˆαŸ’αž˜αŸ„αŸ‡ DNS

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’
αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž–αž–αž€αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ
αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ‚αž“αž‘αžΈ/αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„

αž•αŸ’αž‘αž»αž€αžαž»αž›αŸ’αž™αž—αžΆαž–
αžαŸ’αžŸαŸ‚αž”αžΌ (αžαžΆαž„αž’αžαž·αžαž·αž‡αž“)
αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜, αž§αž”αž€αžšαžŽαŸαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„ (αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ)

αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαž–αžΈαž§αž‘αžΆαž αžšαžŽαŸ

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž™αžΎαž„αžŸαŸ†αžŠαŸ…αž‘αŸ…αž›αžΎ αž‚αž˜αŸ’αžšαŸ„αž„αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› Spring αž“αž·αž„ MicroProfile APIs αž“αž·αž„αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αžαŸ’αž“αžΆαž€αŸ‹ Java αžŠαžΌαž…αž‚αŸ’αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαŸ” αž€αžΌαžŠαž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αžŸαžΌαž˜αž˜αžΎαž›αž―αž€αžŸαžΆαžš README.md αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαŸ”

Spring Framework APIs

αž€αžΆαžšαž…αžΆαž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™

Quarkus αž‚αžΆαŸ†αž‘αŸ’αžšαž‡αž½αžšαž“αŸƒ αž”αžšαž·αž”αž‘ αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž…αžΆαž€αŸ‹β€‹αž’αžΆαžŸαŸ’αžšαŸαž™ (CDI) APIs αž“αž·αž„ Spring Dependency Injection (Spring DI) APIs αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ MicroProfile, Java EE αž“αž·αž„ Jakarta EEαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αž”αžΆαž“αžŸαŸ’αž‚αžΆαž›αŸ‹ CDI αžšαž½αž…αž αžΎαž™αŸ” αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž’αžΆαž…αž”αŸ’αžšαžΎαž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ Quarkus αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Spring DI API αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ Spring DI αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Spring DI APIs αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΈ 2 αŸ”

Π’ αž‚αž˜αŸ’αžšαŸ„αž„αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž”αŸ’αžšαžΎαž‘αžΆαŸ†αž„ CDI αž“αž·αž„ Spring Dependency InjectionαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž“αž·αž„αž§αž‘αžΆαž αžšαžŽαŸαž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡ αžŸαžΌαž˜αž˜αžΎαž›αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† Quarkus αžŠαŸ‚αž›αž αŸ…αžαžΆ αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ DI.

αžαžΆαžšαžΆαž„ 2. αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Spring DI APIs αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ Spring 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;
   }
}

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž”αžŽαŸ’αžαžΆαž‰

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ MicroProfile αž“αžΉαž„αž…αžΌαž›αž…αž·αžαŸ’αžαžαžΆ Quarkus αž‚αžΆαŸ†αž‘αŸ’αžš JAX-RS, MicroProfile Rest Client, JSON-P αž“αž·αž„ JSON-B αž‡αžΆαž‚αŸ†αžšαžΌαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸαž αž‘αŸ†αž–αŸαžšαž…αž˜αŸ’αž”αž„αŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž“αžΉαž„αž–αŸαž‰αž…αž·αžαŸ’αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αž˜αžΈαŸ—αžšαž”αžŸαŸ‹ Quarkus αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Spring Web API αž‡αžΆαž–αž·αžŸαŸαžŸ REST interfacesαŸ” αžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„ Spring DI αžŠαŸ‚αžš αž‚αŸ„αž›αžŠαŸ…αž…αž˜αŸ’αž”αž„αž“αŸƒαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš Spring Web API αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž”αŸ’αžšαžΎ Spring Web APIs αžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™ MicroProfile APIsαŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžšαž”αŸ€αž”αž”αŸ’αžšαžΎ Spring Web APIs αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΈ 3 αž αžΎαž™αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž“αž·αž„αž§αž‘αžΆαž αžšαžŽαŸαž’αŸ†αž–αžΈαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“ Quarkus αžŠαŸ‚αž›αž αŸ…αžαžΆ αž˜αž‚αŸ’αž‚αž»αž‘αŸ’αž‘αŸαžŸαž€αŸαž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ.

αžαžΆαžšαžΆαž„αž‘αžΈ 3. αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Spring Web APIs αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœαžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžš
αž§αž‘αž αžšαžŽαŸ

@αž’αŸ’αž“αž€αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž€
@RequestMapping

@RestController
@RequestMapping("/person")
public class PersonSpringController {
   ...
   ...
   ...
}

@GetMapping
@PostMapping
@PutMapping
@ αž›αž»αž”αž•αŸ‚αž“αž‘αžΈ
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžšαžΆαž„αž€αžΆαž™
@αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž†αŸ’αž›αžΎαž™αžαž”
@ExceptionHandler
@RestControllerAdvice (αž•αŸ’αž“αŸ‚αž€)

@GetMapping(path = "/greet/{id}",
   produces = "text/plain")
   public String greetPerson(
   @PathVariable(name = "id") long id) {
   ...
   ...
   ...
}

αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ JPA

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ MicroProfile αž€αŸαž“αžΉαž„αžŠαžΉαž„αž‚αž»αžŽαž•αž„αžŠαŸ‚αžšαžŠαŸ‚αž› Quarkus αž‚αžΆαŸ†αž‘αŸ’αžš JPA αžŠαŸ„αž™αž”αŸ’αžšαžΎ Hibernate ORM αŸ” αžœαžΆαž€αŸαž˜αžΆαž“αžŠαŸ†αžŽαžΉαž„αž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ SpringαŸ– Quarkus αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹ αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘ Spring Data JPA αž‘αžΌαž‘αŸ…αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Spring Data JPA APIs αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΈ 4 αŸ”
Π’ αž‚αž˜αŸ’αžšαŸ„αž„αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” Spring Data JPA APIs αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αž αžΎαž™αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“ Quarkus αžŠαŸ‚αž›αž αŸ…αžαžΆ αž˜αž‚αŸ’αž‚αž»αž‘αŸ’αž‘αŸαžŸαž€αŸ JPA αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœ.

αžαžΆαžšαžΆαž„ 4. αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Spring Data JPA APIs αŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸ JPA αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœαžŠαŸ‚αž›αž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžš
αž§αž‘αž αžšαžŽαŸ

αžƒαŸ’αž›αžΆαŸ†αž„ Crud

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

αžƒαŸ’αž›αžΆαŸ†αž„
JpaRepository
PagingAndSortingRepository

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);
}

MicroProfile APIs

αž€αžΆαžšαž’αžαŸ‹αž±αž“αž…αŸ†αž–αŸ„αŸ‡αž€αŸ†αž αž»αžŸ

αž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αž€αžΆαžšαž’αžαŸ‹αž±αž“αž…αŸ†αž–αŸ„αŸ‡αž€αŸ†αž αž»αžŸαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αž‡αžΆαž”αžŽαŸ’αžαžΎαžšαŸ— αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αžΈαž€αŸ’αžšαžΌαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αž·αž‘αžΆαžƒαžšαžŠαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ†αž›αŸ‚αž„αžŸαŸ€αž‚αŸ’αžœαžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αžαŸ‹αž±αž“αž€αŸ†αž αž»αžŸαž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž…αŸ’αžšαžΎαž“αž†αŸ’αž“αžΆαŸ†αŸ” αž αŸŠαžΈαžŸαŸ’αž‘αŸ’αžšαžΈαž€. αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ Hystrix αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž”αŸ‹αžŠαŸαžαž™αžΌαžšαž˜αž€αž αžΎαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚ Fault Tolerance αžšαž”αžŸαŸ‹ MicroProfile αž₯αž‘αžΌαžœαž“αŸαŸ‡αž€αŸ†αž–αž»αž„αž’αž—αž·αžœαžŒαŸ’αžαž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜ αž“αž·αž„αž˜αžΆαž“αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αž›αž·αžαž€αž˜αŸ’αž˜αž‡αžΆαž…αŸ’αžšαžΎαž“αž†αŸ’αž“αžΆαŸ†αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αžœαžΆαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αž“αŸƒαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ Quarkus αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž±αŸ’αž™αž”αŸ’αžšαžΎ MicroProfile Fault Tolerance APIs αžŠαŸ‚αž›αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΈ 5 αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αžŸαžΌαž˜αž˜αžΎαž›αžŸαŸ€αžœαž—αŸ…αžŠαŸƒ Quarkus αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž’αžαŸ‹αž±αž“αž€αŸ†αž αž»αžŸ.

αžαžΆαžšαžΆαž„ 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(); //...
}

@αž’αŸ’αž›αžΆαž€αŸ‹β€‹αž…αž»αŸ‡β€‹αž˜αž€β€‹αžœαž·αž‰

αž αŸ…αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž‡αŸ†αž“αž½αžŸαž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αžšαžΆαž‡αŸαž™

@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/αžŸαž»αžαž—αžΆαž–/αž”αž“αŸ’αžαž•αŸ’αž‘αžΆαž›αŸ‹

@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 Boot Actuator αž“αž·αž„ Micrometer αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸαž“ Quarkus αž”αŸ’αžšαžΎ MicroProfile Metrics αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαžœαžΆαžŸαŸ‹αžœαŸ‚αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ (JVM αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš) αžšαž„αŸ’αžœαžΆαžŸαŸ‹αž’αŸ’αž“αž€αž›αž€αŸ‹ (Quarkus) αž“αž·αž„αž˜αŸ‰αŸ‚αžαŸ’αžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” MicroProfile Metrics αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αžΆαŸ†αž‘αŸ’αžšαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž›αž‘αŸ’αž’αž•αž› JSON αž“αž·αž„ OpenMetrics (Prometheus) αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ MicroProfile Metrics API αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΈ 7 αŸ”

Π’ αž‚αž˜αŸ’αžšαŸ„αž„αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” MicroProfile Metrics αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž€αžΆαžšαžœαžΆαžŸαŸ‹αžœαŸ‚αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αžŸαžΌαž˜αž˜αžΎαž›αžŸαŸ€αžœαž—αŸ…αžŠαŸƒ Quarkus αž˜αž‚αŸ’αž‚αž»αž‘αŸ’αž‘αŸαžŸαž€αŸαž˜αŸ‰αŸ‚αžαŸ’αžš.

αžαžΆαžšαžΆαž„αž‘αžΈ 7. αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ MicroProfile Metrics APIs αŸ”

αž›αž€αŸ’αžαžŽαŸˆβ€‹αž–αž·αžŸαŸαžŸ MicroProfile Metrics
αž”αžšαž·αž™αžΆαž™
αž§αž‘αž αžšαžŽαŸ

@ αžšαžΆαž”αŸ‹

αžαŸ†αžŽαžΆαž„β€‹αž’αŸ’αž“αž€β€‹αžšαžΆαž”αŸ‹β€‹αžšαžΆαž”αŸ‹β€‹αž…αŸ†αž“αž½αž“β€‹αžŠαž„β€‹αžŠαŸ‚αž›β€‹αžœαžαŸ’αžαž»β€‹αž…αŸ†αžŽαžΆαžšβ€‹αž˜αž½αž™β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž αŸ…

@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;
}

αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž˜αŸ‰αŸ‚αžαŸ’αžš

αžšαž„αŸ’αžœαžΆαžŸαŸ‹αž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αžΆαž€αŸ’αž™ localhostαŸ– 8080/αž˜αŸ‰αŸ‚αžαŸ’αžš/αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ
αžšαž„αŸ’αžœαžΆαžŸαŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ localhostαŸ– 8080/αž˜αŸ‰αŸ‚αžαŸ’αžš/αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“
αžšαž„αŸ’αžœαžΆαžŸαŸ‹αž“αŸƒαž’αŸ’αž“αž€αž›αž€αŸ‹ localhostαŸ– 8080/αž˜αŸ‰αŸ‚αžαŸ’αžš/αž’αŸ’αž“αž€αž›αž€αŸ‹
αžšαž„αŸ’αžœαžΆαžŸαŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” localhostαŸ– 8080/αž˜αŸ‰αŸ‚αžαŸ’αžš

αž’αžαž·αžαž·αž‡αž“αžŸαž˜αŸ’αžšαžΆαž€ MicroProfile

Microservices αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž•αŸ’αžαž›αŸ‹αž“αžΌαžœ RESTful endpoints αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžš APIs αž’αžαž·αžαž·αž‡αž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎ RESTful endpoints αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž”αŸ’αžšαžΎ RestTemplateαŸ” Quarkus αž•αŸ’αžαž›αŸ‹αž‡αžΌαž“ MicroProfile Rest Client APIs αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΈ 8 αŸ”

Π’ αž‚αž˜αŸ’αžšαŸ„αž„αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ RESTful endpoints αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŠαŸ„αž™αž”αŸ’αžšαžΎ MicroProfile Rest Client αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ αž“αž·αž„αž§αž‘αžΆαž αžšαžŽαŸαž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ€αžœαž—αŸ…αžŽαŸ‚αž“αžΆαŸ† Quarkus αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αžαž·αžαž·αž‡αž“αžŸαž˜αŸ’αžšαžΆαž€.

αžαžΆαžšαžΆαž„αž‘αžΈ 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;

αž€αžΆαžšαž αŸ…

αž αŸ…αž‘αŸ…αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹ REST

System.out.println(
   restClient.getSalutation());

mp-rest/url

αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž…αŸ†αžŽαž»αž…β€‹αž”αž‰αŸ’αž…αž”αŸ‹ REST

application.properties:
org.example.MyRestClient/mp-rest/url=
   http://localhost:8081/myendpoint

αž›αž‘αŸ’αž’αž•αž›

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž€αŸ‹αž“αŸαŸ‡αžŠαŸ‚αž›αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‡αžΆαž…αž˜αŸ’αž”αž„αž‘αŸ…αž›αžΎαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ Spring αž™αžΎαž„αž”αžΆαž“αž˜αžΎαž›αž™αŸ‰αžΆαž„αžšαž αŸαžŸαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎ Spring APIs αž‡αžΆαž˜αž½αž™ MicroProfile APIs αž€αŸ’αž“αž»αž„ Quarkus αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž microservices Java αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αž„αž€αŸ’αžšαž„αžœαžΆαž‘αŸ…αž‡αžΆαž€αžΌαžŠαž‚αŸ„αž›αž–αžΈαžšαžŠαžΎαž˜αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ RAM αžšαžΆαž”αŸ‹αžšαž™αž˜αŸαž αŸ’αž‚αžΆαž”αŸƒ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž€αŸ’αž“αž»αž„ αž”αž‰αŸ’αž αžΆαž“αŸƒαž˜αžΈαž›αžΈαžœαž·αž“αžΆαž‘αžΈαŸ”

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αž™αž›αŸ‹αžšαž½αž…αž αžΎαž™ αž–αŸαžαŸŒαž˜αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Spring αž“αž·αž„ MicroProfile APIs αž€αŸαžŠαžΌαž…αž‡αžΆαž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αžαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„ αžŸαŸ€αžœαž—αŸ…αžŽαŸ‚αž“αžΆαŸ† Quarkus.

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹