ආයුබෝවන් හැමෝටම, මෙන්න ක්වාර්කස් කතා මාලාවේ තුන්වෙනි පෝස්ට් එක!
Java microservices සංවර්ධනය කිරීමේදී, එය බොහෝ විට විශ්වාස කෙරේ
තව ටිකක් විස්තරාත්මකව, අපි මුලින්ම ස්ප්රින්ග් සංවර්ධකයින්ට ඔවුන්ගේ එදිනෙදා වැඩවලදී මයික්රොප්රොෆයිල් ඒපීඅයි භාවිතා කරන්නේ කෙසේදැයි පෙන්වීමට ක්වාර්කස් ස්ප්රින්ග් ඒපීඅයි සඳහා සහය දක්වන ආකාරය පිළිබඳ විෂය පථය සහ විස්තර දෙස බලමු. එවිට අපි ක්ෂුද්ර සේවා නිර්මාණය කිරීමේදී වසන්ත සංවර්ධකයින්ට ප්රයෝජනවත් වන MicroProfile API ආවරණය කරන්නෙමු.
ඇයි ක්වාර්කස්? පළමුව, මෙය සජීවී කේතීකරණය, එනම්, MicroProfile API, Spring API සහ අනෙකුත් ජාවා API වල යම් වෙනසක් ස්වයංක්රීයව නැවත පූරණය කිරීම, එය එක් විධානයකින් පමණක් සිදු කෙරේ: mvn quarkus:dev. දෙවනුව, සලකා බලනු ලැබේ
Quarkus හි MicroProfile API සමඟ Spring API භාවිතා කළ හැකි ආකාරය Spring සංවර්ධකයින්ට තේරුම් ගැනීමට උපකාර කිරීම හැර, අපි MicroProfile ගැන විස්තර කිරීමට යන්නේ නැත.
බහාලුම් සහ කුබර්නෙට්
මෙම ලිපිය සරලව තබා ගැනීමට, අපි මෙහි සහය පිළිබඳ ඉහළ මට්ටමේ අංශ පමණක් ආවරණය කරන්නෙමු.
ක්වාර්කස් ද
අවසාන වශයෙන්, Kubernetes ඉලක්කගත යෙදවීමේ පරිසරය ලෙස අවධානය යොමු කිරීමෙන්, Quarkus විසින් Kubernetes වේදිකාවේ මට්ටමින් සමාන ක්රියාකාරීත්වයක් ක්රියාත්මක වන අවස්ථා වලදී ජාවා රාමු භාවිතා නොකරයි. වගුව 1 මගින් Kubernetes සහ Spring Developers විසින් භාවිතා කරන සාමාන්ය Java රාමු අතර ක්රියාකාරී ලිපි හුවමාරුවේ සිතියමක් සපයයි.
වගුව 1. Java frameworks සහ Kubernetes අතර ක්රියාකාරී ලිපි හුවමාරුවේ සිතියම.
ක්රියාකාරී
සාම්ප්රදායික වසන්ත බූට්
කුබර්නෙට්ස්
සේවා සොයා ගැනීම
යුරේකා
DNS
වින්යාස
Spring Cloud Config
සිතියම්/රහස් වින්යාස කරන්න
ශේෂය පැටවීම
පීත්ත පටිය (සේවාදායක පැත්ත)
සේවාව, අනුකරණ පාලකය (සේවාදායක පැත්ත)
උදාහරණයෙන් කේතය සම්පාදනය කිරීම සහ ධාවනය කිරීම
මෙම ලිපියෙන් අපි යොමු කරමු
Spring Framework API
යැපුම් එන්නත් කිරීම
Quarkus පරාසයකට සහය දක්වයි
В
වගුව 2. සහය දක්වන Spring DI API භාවිතා කිරීමේ උදාහරණ.
සහය දක්වන 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;
}
}
වෙබ් රාමුව
ප්රාථමික වෙබ් ක්රමලේඛන ආකෘතිය ලෙස ක්වාර්කස් JAX-RS, MicroProfile Rest Client, JSON-P, සහ JSON-B සඳහා සහාය දක්වන බව MicroProfile පරිශීලකයන් කැමති වනු ඇත. Spring Web API, විශේෂයෙන්ම REST අතුරුමුහුණත් සඳහා Quarkus හි මෑතකාලීන සහාය පිළිබඳව වසන්ත සංවර්ධකයින් සතුටු වනු ඇත. Spring DI වලට සමානව, Spring Web API සහයයේ ප්රධාන අරමුණ වන්නේ Spring Developers හට MicroProfile API සමඟ එක්ව Spring Web API භාවිතා කිරීමට හැකිවීමයි. සහය දක්වන Spring Web API භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ උදාහරණ වගුව 3 හි සපයා ඇති අතර, මෙම මාතෘකාව පිළිබඳ වැඩි විස්තර සහ උදාහරණ Quarkus නිබන්ධනයෙන් සොයා ගත හැක.
වගුව 3. සහාය දක්වන Spring Web API භාවිතා කිරීමේ උදාහරණ.
සහය දක්වන වසන්ත වෙබ් විශේෂාංග
උදාහරණ
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
...
...
...
}
@GetMapping
@පසු සිතියම්කරණය
@PutMapping
@Deleteමැපිං
@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) {
...
...
...
}
වසන්ත දත්ත JPA
Hibernate ORM භාවිතා කරමින් Quarkus JPA සඳහා සහය දක්වන බව MicroProfile පරිශීලකයන් අගය කරනු ඇත. වසන්ත සංවර්ධකයින් සඳහා හොඳ ආරංචියක් ද ඇත: Quarkus පොදු වසන්ත දත්ත JPA අනුසටහන් සහ වර්ග සඳහා සහය දක්වයි. සහාය දක්වන Spring Data JPA API භාවිතා කිරීමේ උදාහරණ වගුව 4 හි දක්වා ඇත.
В
වගුව 4. සහාය දක්වන වසන්ත දත්ත JPA API භාවිතා කිරීමේ උදාහරණ.
සහය දක්වන වසන්ත දත්ත JPA විශේෂාංග
උදාහරණ
CrudRepository
public interface PersonRepository
extends JpaRepository,
PersonFragment {
...
}
ගබඩාව
Jpa නිධිය
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 API
වැරදි ඉවසීම
කැස්කැඩින් අසාර්ථක වීම වැළැක්වීම සහ විශ්වාසනීය ක්ෂුද්ර සේවා ගෘහ නිර්මාණ ශිල්පය නිර්මාණය කිරීම සඳහා දෝෂ ඉවසීමේ ඉදිකිරීම් ඉතා වැදගත් වේ. වසන්ත සංවර්ධකයින් වසර ගණනාවක් තිස්සේ දෝෂ ඉවසීම සඳහා පරිපථ කඩන යන්ත්ර භාවිතා කර ඇත.
වගුව 5. සහාය දක්වන MicroProfile Fault Tolerance API භාවිතා කිරීමේ උදාහරණ.
MicroProfile වැරදි ඉවසීමේ විශේෂාංග
විස්තර
උදාහරණ
@Asynchronous
වෙනම ත්රෙඩ් එකක ලොජික් ක්රියාත්මක කිරීම
@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(); //...
}
පිරික්සුම් සේවා (සේවා සෞඛ්යය)
Kubernetes වේදිකා විශේෂ සේවාවන් භාවිතා කරමින් බහාලුම්වල සෞඛ්යය නිරීක්ෂණය කරයි. යටින් පවතින වේදිකාවට සේවා නිරීක්ෂණය කිරීමට ඉඩ දීම සඳහා, Spring සංවර්ධකයින් සාමාන්යයෙන් අභිරුචි HealthIndicator සහ Spring Boot Actuator භාවිතා කරයි. Quarkus හි, මෙය MicroProfile Health භාවිතයෙන් සිදු කළ හැක, එය පෙරනිමියෙන් සජීවී පරීක්ෂාවක් සිදු කරයි, නමුත් සජීවී බව සහ සූදානම එකවර පරීක්ෂා කිරීමට වින්යාසගත කළ හැක. සහාය දක්වන MicroProfile Health API භාවිතා කරන ආකාරය පිළිබඳ උදාහරණ වගුව 6 හි සපයා ඇති අතර අමතර තොරතුරු Quarkus අත්පොතෙහි දක්වා ඇත.
වගුව 6: සහාය දක්වන MicroProfile Health API වල භාවිත උදාහරණ.
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 Boot Actuator සහ Micrometer භාවිතයෙන් ප්රමිතික සපයයි. අනෙක් අතට, Quarkus මූලික ප්රමිතික (JVM සහ මෙහෙයුම් පද්ධතිය), විකුණුම් ප්රමිතික (Quarkus) සහ යෙදුම් ප්රමිතික සැපයීමට MicroProfile Metrics භාවිතා කරයි. MicroProfile Metrics හට ක්රියාත්මක කිරීම JSON සහ OpenMetrics (Prometheus) ප්රතිදාන ආකෘති සඳහා සහය දැක්වීම අවශ්ය වේ. MicroProfile Metrics API භාවිතා කිරීමේ උදාහරණ වගුව 7 හි දක්වා ඇත.
В
වගුව 7. MicroProfile Metrics API භාවිතා කිරීමේ උදාහරණ.
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;
}
ප්රමිතික අන්ත ලක්ෂ්ය
යෙදුම් මිතික
මූලික මිනුම්
විකුණුම් මිමි
සියලුම මිනුම්
MicroProfile විවේක සේවාලාභියා
ක්ෂුද්ර සේවා බොහෝ විට RESTful endpoints සපයන අතර ඒවා සමඟ වැඩ කිරීමට අනුරූප සේවාදායක API අවශ්ය වේ. RESTful endpoints භාවිතා කිරීමට, Spring developers සාමාන්යයෙන් RestTemplate භාවිතා කරයි. Quarkus විසින් මෙම ගැටළුව විසඳීම සඳහා MicroProfile Rest Client API ඉදිරිපත් කරයි, ඒවා භාවිතා කිරීමේ උදාහරණ වගුව 8 හි දක්වා ඇත.
В
වගුව 8. MicroProfile Rest Client API භාවිතා කිරීමේ උදාහරණ.
MicroProfile Rest Client විශේෂාංග
විස්තර
උදාහරණ
@RegisterRestClient
ටයිප් කළ ජාවා අතුරු මුහුණතක් 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
ප්රතිඵල
මූලික වශයෙන් වසන්ත සංවර්ධකයින් ඉලක්ක කරගත් මෙම බ්ලොගය තුළ, අපි Java microservices සංවර්ධනය කිරීමට Quarkus හි MicroProfile API සමඟ Spring API භාවිතා කරන ආකාරය සහ ඒවා මෙගාබයිට් සිය ගණනක් RAM ඉතිරි කර දියත් කරන ස්වදේශීය ද්විමය කේතයට සම්පාදනය කරන්නේ කෙසේද යන්න පිළිබඳව ඉක්මන් විමසා බැලුවෙමු. මිලි තත්පර වල කාරණයක්.
ඔබ දැනටමත් තේරුම් ගෙන ඇති පරිදි, Spring සහ MicroProfile API සඳහා සහය පිළිබඳ වැඩිදුර තොරතුරු මෙන්ම තවත් බොහෝ ප්රයෝජනවත් තොරතුරු සොයා ගත හැක.
මූලාශ්රය: www.habr.com