แฐแแ แฐแแแ .
แชแแขแ แฎแแแก แฌแแ แแ
แแแแแแแแ แแแ แแแแแแแชแแแแ แแฃแจแแแแก แซแแแแแ แ แแฃแ แแแ แแแแจแ. แแแแแแก แแแแแแ แจแแคแฃแแฃแแแ แแแแแแแแ แแแ แขแแฅแแแแแแแแแแก แแแกแขแแจแ, แแฃแจแแแแก Docker แแแแแกแแฎแฃแแแแแจแ, แ แแแแแกแแช แแแ แแแแก แแ แแแกแขแ แแขแแ แ, แ แแแแ แแชแแ Kubernetes แแ OpenShift, แแ แแแแฃแแแแแชแแ แกแฎแแ แแแแแแแชแแแแแแ แแ แกแแฌแแ แแแก แแแแแฌแงแแแขแแแแแแแแแ แคแแแแแฃแ แ แแ แแแ แขแฃแแแฃแ แ แแแ แจแ แฃแขแแแแขแแ แแแแก แฏแแญแแแก แแแจแแแแแแ. แแกแแ แแแ แแแแจแ แ แแฆแแช แงแแแแแแแแก แจแแแซแแแแ แแแแ แฆแแแก, แแแแขแแ แแแแแแแแแแก แฎแแแแฎแแแ แแแแฃแจแแแแแ, แแฃ แ แแแแแแแ แแแ แ แกแแกแขแแแ แแแฃแฌแแแแแแแแ, แฉแแแแ แแแแแแก แแ แแชแแกแแแแก แแแแจแแแแแแแแแ แแแฌแแแแ.
แ แแแแ แแงแ แแแคแแแแแ
แแแ แ แแ แแแฅแขแจแ แฉแแแ แแแงแแแแแแแ IBM MQ แจแแขแงแแแแแแแแแแก แแกแแแฅแ แแแฃแแ แแแฌแแแแแแกแแแแก. แแฃ แ แแแแ แจแแชแแแแ แแแฎแแ แกแแ แแแกแแก แแฃแจแแแแแก แแ แแก, แแแฆแแแฃแแ แจแแขแงแแแแแแแ แจแแแซแแแแ แแแแแแแกแแแก แแแแแแ แ แแกแแแแแก แ แแแจแ (DLQ) แจแแแแแแแ แฎแแแแ แแแแแแแแกแแแแแก. DLQ แจแแแฅแแแ แจแแแแแแแแแ แ แแแแก แแแแ แแแ, แจแแขแงแแแแแแแ แแแแแแแแ IBM MQ-แจแ.
แแฃ แจแแชแแแแ แแ แแแแแแ แแงแ แแ แจแแแแแซแแ แแแกแ แแแแแแแ (แแแแแแแแแ, ResourceAccessException HTTP แแแ แแ แแ MongoTimeoutException MongoDb แแแแฎแแแแแแ), แแแจแแ แฎแแแแฎแแ แชแแแก แกแขแ แแขแแแแ แซแแแแจแ แจแแแ. แแแแแแแชแแแก แแแแจแขแแแแแก แแแแแแแก แแแฃแฎแแแแแแ, แแแแแแแแ แแแแ แจแแขแงแแแแแแแ แแแแแแแแ แแ แกแแกแขแแแแก แ แแแจแ แแแแแแแแแแฃแแ แแแแแแแแแกแแแแก, แแ แชแแแแแฃแ แแแแแแแชแแแจแ, แ แแแแแแช แแแแ แฎแแแก แฌแแ แแแแแแแ แจแแขแงแแแแแแแแแแก แฎแแแแฎแแ แแแกแแแแแแแแ. แแก แแแแชแแแก แฎแแแแฎแแ แแแแแแแแแก แแแแแ แก แจแแขแงแแแแแแแแก แกแแแแฃแ แจแ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ แแแงแแแแแแแก แแแขแแ แแแแแแ แแ แแแแแแแชแแแก แแแแแก แกแขแ แแขแแแแแก แแแกแแกแ แฃแแแแ. แแฃ แฉแแแ แแแแแฆแฌแแแ แกแขแ แแขแแแแแก แแแกแแกแ แฃแแก, แแแแ แแ แแแ แ แกแแกแขแแแ แฏแแ แแแแแ แแแฃแฌแแแแแแแแ, แแแจแแ แจแแขแงแแแแแแแ แแแแแแแกแแแแ DLQ-แจแ แฎแแแแ แแแแแแแแแแแแกแแแแก.
แแแแแฌแงแแแขแแก แซแแแแ
แแแแแแแแ แแแแแฎแแแแแแแก แแแแ แ แแแแแแแแแก แแแฃแฎแแแแแแ, แแแฉแแแแแแ, แ แแ แแก แแ แช แแฃ แแกแ แฌแแ แแแขแแแฃแแแ. แแแ แแแ แ แแแจแ แแแแขแแ, แ แแ แแแแแแแแแ แก, แแแแแแก แแแแฎแแแแแแแก แแแแแ แแแแก แแแ แแ, แแแฃแฌแแแก แแแแ แแ แแแก แแแฎแแ แฏแแ แแฆแฌแแ แแแ แแแฅแแแแแแแก แแแแแ แแแแแ.
แแแ แแ แแแแกแ, แแฃ แฌแแแแแแก แแแแขแ แแแ แฉแแ แแฃแแแ แแแคแแแก แแแแกแขแแ แแ, แแแแแฌแแแ แแแ แแแแฃแแ แแ แแแก แแแฎแแ แฏแแ แแแแแแแก แจแแฅแแแแกแ แแ แแแแแ แกแแญแแ แ แฌแแแแแแก แฃแแ แฃแแแแแงแแคแแก. แแแแก แแแ แแ, แแฅแแแ แฃแแแ แแแ แฉแแแ แกแฌแแ แ retention.ms แแแ แแแแขแ แ แแแแแแฃแแ แฎแแแแฎแแแ แแแแแกแแแแก, แ แแแ แจแแขแงแแแแแแแแแก แฐแฅแแแแแก แแ แ แฎแแแแฎแแ แแแกแแแแแแแแ แแ แแ แแแฅแ แแก แแแกแแแ. แฌแแแแแแก แแแแฎแแ แชแแแแแแ แแ แแแแฎแแแแ แฃแแแ แแแแแแแ แแแก แงแแแแแ แแ แกแแแฃแแ แแ แแฎแแแ แกแแ แแแกแแกแแแแก.
แแฎแแ แแแแฎแแ, แ แ แแแฅแแแแแแแแก แแแแซแแแแก แแแแแแ แ แแแแแแแ แแ แแแแแแ แ-แแแคแแ แแแแแ แแขแฃแแแ แแแกแแฏแแแแก แแแแแแฃแจแแแแแแกแแแแก. Spring-kafka-แก แแฅแแก แแแ แแแแแแแแ แแแแแแแแแแฃแแแแ แแแแแคแฎแฃแแแ แฎแแแแฎแแ แชแแแแ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แแแกแขแ แแฅแชแแแแก แกแฎแแแแแกแฎแแ BackOffPolicies-แแก แแแ แแแแกแแแแก. แแก แแ แแก แกแแแแแแ แแแฅแแแแ แแแกแขแ แฃแแแแขแ, แแแแ แแ แแแกแ แแแแจแแแแแแแแแ แแแแแ แแ แแก แจแแขแงแแแแแแแแแแก แจแแแแฎแแ แแ แแแ แแแแก แแแฎแกแแแ แแแแจแ แฎแแแแฎแแ แแแกแแแแแแแแ. แแก แแแจแแแแก, แ แแ แแแแแฎแแแแแก แแ แแแแ แแชแแฃแแ แจแแชแแแแแก แแแแ แแแแแแแชแแแก แแแแแขแแแ แแแ แแแแแแฌแแแแก แฎแแแแฎแแแ แแแแฃแจแแแแแแก แแแแแแแแแ แงแแแแ แจแแขแงแแแแแแแแก แแแแแ แแแแก. แแแแแแแแ แแก แแฃแแฅแขแ แแ แแขแแแฃแแแ แฉแแแแ แกแแกแขแแแแกแแแแก, แฉแแแ แแฆแแ แแแแแแฎแแแแแ แแแก.
Spring-kafka แแแแแ แฃแแ แฃแแแแแงแแคแก ContainerAwareErrorHandler-แแก แ แแแแแแแแ แแแแฎแแ แชแแแแแแแก, แแแแแแแแแ
แแก แแแแแแแ แกแแจแฃแแแแแแก แแซแแแแก แฎแแแแฎแแ แแแแฃแจแแแแแฃแ แจแแขแงแแแแแแแแแก แแแแแ แฉแแก แแแแแแแชแแแก แแแแแขแแแ แแแแจแ, แแแแ แแ แฏแแ แแแแแ แแ แแ แกแแแแแก DLQ แแแฅแแแแแแ. แฉแแแ แแแแ แฉแแแ แแก แแแ แแแแขแ 2019 แฌแแแก แแแกแแฌแงแแกแจแ, แแแขแแแแกแขแฃแ แแ แแแฏแแ แแแ, แ แแ DLQ แแ แแฅแแแแแแ แกแแญแแ แ (แแแแแแแแ แแแ แแ แ แแแแฃแ แแ แแ แแแแแญแแ แแ แแแแแแแชแแแก แแกแแแ แแแแแแฃแจแแแแแแก แกแแกแขแแแแ แแฃแจแแแแแก แ แแแแแแแแ แแแแก แจแแแแแ). แแ แแแแแแแ แจแแชแแแแแแแ แแแแแแฌแแแ SeekToCurrentErrorHandler-แแก แแแแฅแขแแฃแ แแแ. แแแ แฉแแแแแ แจแแชแแแแแแ แแแแแแญแแ แแฃแ แแแแจแ, แ แแก แจแแแแแแแแช แแแฎแแ แแคแกแแขแฃแ แ แแ แแแแฃแจแแแแแ แแแแ แซแแแแ แจแแแแแแ แจแแขแงแแแแแแแแ.
แฒกแแแแแแ แแแแแฌแงแแแขแแแแแ
SeekToCurrentErrorHandler-แแ แแแคแฃแซแแแแฃแแแ แแแแแแแแแขแแชแแแ แแแแแชแ แจแแแแแฅแแแ แจแแขแงแแแแแแแแแแก แฎแแแแฎแแ แแแแแแแแแก แกแแแฃแแแ แ แแแฅแแแแแแ.
แฃแแแ แแแแแก แงแแแแแกแ, แแแแแแแแ แแแแแแแแงแแแแแแแ แแ แกแแแฃแแ แแแแแชแแแแแแ แแ แแแคแแ แแแแแฃแแแงแ แแแแแแแชแแแก แแแแแแแก แแแฎแแแแแ. แฎแแแแแแแ แแแแแแแก แแแแแแแชแแแกแแแแก แแแขแแแแแฃแ แ แแฅแแแแแแ แแฎแแแ แจแแขแงแแแแแแแแแแก แฌแแแแแฎแแแก แจแแฌแงแแแขแ แฎแแแแฎแแแ แชแแแก แกแขแ แแขแแแแแ แแแแกแแแฆแแ แฃแแ แแ แแแก แแแแแ แแแแแแแแแแ. แกแฎแแ แแแแแแแชแแแแแกแแแแก แแแแแแแ แแฅแแแแแ แแ แแ แฌแแ แขแแแ, แ แแแแแแช แแแแแฎแแ แชแแแแแแแ แฎแแแแฎแแ แชแแแก แกแขแ แแขแแแแแก. แแแ แแ แแแแกแ, แแ แแ แ แฌแแ แขแแแก แฃแแแ แฐแฅแแแแแก DLQ แคแฃแแฅแชแแแแแ แแแ แแ แแแ แแแแแแแแกแแแแก.
แแแแแแแ แแแแแ แกแขแ แแขแแแแ แแแแแ แฃแแแ แแงแแก แจแแแแฎแฃแแ แแแแแแแชแแแจแ, แ แแแแแแช แแแกแฃแฎแแกแแแแแแแแ แแ แแแแแแ แจแแชแแแแแก แแแแแแแแก แจแแแแแแแ แแแขแแ แแแแแก แแแซแแแแแแ.
แแแแฎแแแ แแแแแก แจแแฉแแ แแแ แฎแแแแแแแ แแแแแแแก แแแแแแแชแแแกแแแแก
Spring-kafka-แแแ แแฃแจแแแแแกแแก, แแแแฎแแแ แแแแแก แจแแฉแแ แแแแก แแแแ แจแแแซแแแแ แแกแ แแแแแแงแฃแ แแแแแแก:
public void pauseListenerContainer(MessageListenerContainer listenerContainer,
Instant retryAt) {
if (nonNull(retryAt) && listenerContainer.isRunning()) {
listenerContainer.stop();
taskScheduler.schedule(() -> listenerContainer.start(), retryAt);
return;
}
// to DLQ
}
แแแแแแแแจแ, retryAt แแ แแก MessageListenerContainer-แแก แแแแแขแแแ แแแแก แแ แ, แแฃ แแก แฏแแ แแแแแ แแฃแจแแแแก. แฎแแแแฎแแแ แแแจแแแแ แแแฎแแแแ TaskScheduler-แจแ แแแจแแแแฃแ แชแแแแแฃแ แแแแแจแ, แ แแแแแก แแแแฎแแ แชแแแแแแแช แแกแแแ แฃแแ แฃแแแแแงแแคแแแแ แแแแแคแฎแฃแแแ.
แฉแแแ แแแแฃแแแแ retryAt แแแแจแแแแแแแแก แจแแแแแแ แแแแ:
- แฎแแแแฎแแแ แแแแแซแแฎแแแแก แแ แแชแฎแแแแแก แฆแแ แแแฃแแแแ แแแซแแแแแแแ.
- แแ แแชแฎแแแแแก แแแแจแแแแแแแแแแ แแแแแแแแแแ แ, แแแแแแแ แแแแแ แกแขแ แแขแแแแแก แแแงแแแแแแแก แแแแแแแแ แ แแแขแแ แแแแ แแแซแแแแแแแ. แกแขแ แแขแแแแ แแแแแแ แแ แแแฃแแแ แแแแแ แแแแแแแชแแแจแ; แฉแแแ แแแแ แฉแแแ JSON แคแแ แแแขแ แแแก แจแแกแแแแฎแแ.
- JSON แแแกแแแจแ แแแแแแแ แแแขแแ แแแแ แจแแแชแแแก แฌแแแแแแก แ แแแแแแแแแก, แ แแก แจแแแแแแแช แแแแฃแจแแแแแ แฃแแแ แแแแแแแ แแแก. แฌแแแแแแก แแก แ แแแแแแแแ แแแแขแแแ แแแแแแแแ แ แแ แแก, แ แแแ แจแแแฅแแแแก แแแแจแแแแแแแ retryAt-แแกแแแแก.
- แแฃ แแแขแแ แแแแ แแแ แแแแซแแแแ, แแแจแแ retryAt-แแก แแแแจแแแแแแแ แแ แแก null แแ แจแแขแงแแแแแแแ แแแแแแแแแแแ DLQ-แก แฎแแแแ แแแแแแแแกแแแแแก.
แแ แแแแแแแแ, แ แฉแแแ แแฎแแแแ แแแแแแแ แแแแแ แแแ แแแแก แ แแแแแแแแแก แจแแแแฎแแ แแแแแแฃแแ แจแแขแงแแแแแแแแกแแแแก, แ แแแแแแช แแแแแแแ แแฃแจแแแแแแ, แแแแแแแแแ, แแแแแแแชแแแก แแแฎแกแแแ แแแแจแ. แแแฎแกแแแ แแแแจแ แฎแแแแฎแแแ แชแแแแแก แ แแแแแแแแแก แจแแแแ แฉแฃแแแแ แแ แแ แแก แแแแแแฌแงแแแขแ แแ แแแแแแแแกแแแแก, แ แแแแแ แฌแ แคแแแ แแแแแแแก แแแแแแแชแแ แแแ แฃแแแแแแแแแ แแแแแแ แแแแฃแจแแแแแแก. แแแแแคแฎแฃแแแ แฎแแแแฎแแ แชแแแกแแแ แแแแกแฎแแแแแแแ, แแแแแแแชแแแก แแแแแขแแแ แแแ แแ แแแแแแฌแแแแก แงแแแแ แจแแขแงแแแแแแแแก แแแแแ แแแแก แฎแแแแฎแแ แแแแฃแจแแแแแแก, แแแแ แแ แฃแแ แแแแ แแแแแแขแแแ แแแแ แกแขแ แแขแแแแ.
แแก แแแแแแแ แแฎแแแ แแแ แแแ แ แกแแกแขแแแแแแ แแแขแแแ แแแแก แแแแฆแแแแก, แ แแแแแแช แจแแแซแแแแ แแแฃแฌแแแแแแแ แแงแแก แซแแแแแ แแซแแแ แแแขแแแ แแแแก แแแแ. แกแฎแแ แกแแขแงแแแแแ แ แแ แแแฅแแแ, แแแแแแฃแจแแแแแแก แแแ แแ, แฉแแแ แแแแแฆแฌแแแ แแแแฃแจแแก แแแแฎแแ แชแแแแแแแก
แฉแแแแก แจแแแแฎแแแแแจแ, แจแแชแแแแแก แแฆแแแ แ แแ แแก แแฎแแแแ 1 แแ แฅแกแแแแก แแ แแแแแแ แแแแแจแแแก แแแแ แกแแกแขแแแแก แจแแคแแ แฎแแแแก แจแแกแแแชแแ แแแแแ, แฉแแแ แแแงแแแแแ แซแแแแแ แแ แแแฃแแฃแ แฎแแแแฎแแแ แชแแแก แกแขแ แแขแแแแแก แแชแแ แ แจแแงแแแแแแแก แแแขแแ แแแแแแแ. แแก แจแแแซแแแแ แแ แแงแแก แจแแกแแคแแ แแกแ แงแแแแ แฏแแฃแคแฃแ แ แแแแแแแชแแแกแแแแก, แแแแขแแ แจแแชแแแแแก แแฆแฃแ แแแกแ แแ แแแขแแ แแแแแก แแแแจแแแแแแแแก แจแแ แแก แแแแจแแ แ แฃแแแ แจแแแ แฉแแก แกแแกแขแแแแก แแแฎแแกแแแแแแแแแแก แแแฎแแแแแ.
แแ แแแแขแแ แแแแแกแขแฃแแ แแแแแแแก แแฅแแแ แแแแแแแชแแแแแแแ แจแแขแงแแแแแแแแแแก แแแแฃแจแแแแแแก แชแแแแ แแแแแแแชแแ
แแฅ แแ แแก แแแแแก แแแแแแแแ, แ แแแแแแช แแแแแแแแก แจแแขแงแแแแแแแแก แแกแแ แแแแแแแชแแแจแ (แแแแแแแ แแแแแ แแชแแแแแแ), แ แแแแแแช แฎแแแแฎแแ แแแแแแแแแแแ DESTINATION แแแแแจแ, แ แแแแกแแช RETRY_AT แแ แ แแแแฆแฌแแแก:
public <K, V> void retry(ConsumerRecord<K, V> record, String retryToTopic,
Instant retryAt, String counter, String groupId, Exception e) {
Headers headers = ofNullable(record.headers()).orElse(new RecordHeaders());
List<Header> arrayOfHeaders =
new ArrayList<>(Arrays.asList(headers.toArray()));
updateHeader(arrayOfHeaders, GROUP_ID, groupId::getBytes);
updateHeader(arrayOfHeaders, DESTINATION, retryToTopic::getBytes);
updateHeader(arrayOfHeaders, ORIGINAL_PARTITION,
() -> Integer.toString(record.partition()).getBytes());
if (nonNull(retryAt)) {
updateHeader(arrayOfHeaders, COUNTER, counter::getBytes);
updateHeader(arrayOfHeaders, SEND_TO, "retry"::getBytes);
updateHeader(arrayOfHeaders, RETRY_AT, retryAt.toString()::getBytes);
} else {
updateHeader(arrayOfHeaders, REASON,
ExceptionUtils.getStackTrace(e)::getBytes);
updateHeader(arrayOfHeaders, SEND_TO, "backout"::getBytes);
}
ProducerRecord<K, V> messageToSend =
new ProducerRecord<>(retryTopic, null, null, record.key(), record.value(), arrayOfHeaders);
kafkaTemplate.send(messageToSend);
}
แแแแแแแแ แแแแฉแแแแแแก, แ แแ แแแแ แ แแแคแแ แแแชแแ แแแแแแชแแแ แกแแแแฃแ แแแจแ. RETRY_AT-แแก แแแแจแแแแแแแ แแแแซแแแแแแ แแกแแแ, แ แแแแ แช แแแแแแแ แแแแแ แชแแแก แแแฅแแแแแแแกแแแแก Consumer stop-แแก แแแจแแแแแแ. DESTINATION-แแกแ แแ RETRY_AT-แแก แแแ แแ, แฉแแแ แแแแแแแแ แ:
- GROUP_ID, แ แแแแแแแช แแแฏแแฃแคแแแ แจแแขแงแแแแแแแแแก แฎแแแแ แแแแแแแแกแ แแ แแแแแ แขแแแแแฃแแ แซแแแแแกแแแแก.
- ORIGINAL_PARTITION แจแแแชแแแแ แจแแแแแ แฉแฃแแแ แแแแแ แแแแฎแแแ แแแแแ แฎแแแแฎแแแ แแแแฃแจแแแแแแกแแแแก. แแก แแแ แแแแขแ แ แจแแแซแแแแ แแงแแก null, แแ แจแแแแฎแแแแแจแ แแฎแแแ แแแแแงแแคแ แแแแฆแแแ แแ แแแแแแแฃแ แ แจแแขแงแแแแแแแแก record.key() แแแแแแจแแก แแแแแงแแแแแแ.
- แแแแแฎแแแแฃแแแ COUNTER แแแแจแแแแแแแ แฎแแแแฎแแ แชแแแก แกแขแ แแขแแแแแก แจแแกแแกแ แฃแแแแแแ.
- SEND_TO แแ แแก แแฃแแแแแ, แ แแแแแแช แแแฃแแแแแแก, แแแแแแแแแ แแฃ แแ แ แจแแขแงแแแแแแแ แฎแแแแฎแแแ แแแแฃแจแแแแแแกแแแแก RETRY_AT-แแ แแแฆแฌแแแแก แจแแแแแ, แแฃ แแแแแแแกแแแฃแแแ DLQ-แจแ.
- REASON - แจแแขแงแแแแแแแแแแก แแแแฃแจแแแแแแก แจแแฌแงแแแขแแก แแแแแแ.
Retryer แแแแฎแแแก แจแแขแงแแแแแแแแแก แฎแแแแฎแแ แแแกแแแแแแแแ แแ แฎแแแแ แแแแแแแแแแแแกแแแแก PostgreSQL-แจแ. แขแแแแแ แ แแฌแงแแแก แแแแแแแแแก, แ แแแแแแช แแแฃแแแแก แจแแขแงแแแแแแแแแก RETRY_AT-แแ แแ แแแ แฃแแแแก แแแ DESTINATION แแแแแก ORIGINAL_PARTITION แแแแงแแคแแแแแแจแ แแแกแแฆแแแแ record.key().
แแแแแแแแแก แจแแแแแ, แจแแขแงแแแแแแแแแ แฌแแแจแแแแ PostgreSQL-แแแ. แจแแขแงแแแแแแแแแแก แฎแแแแ แแแแแแแ แฎแแแแ แแแ แขแแ แแแขแแ แคแแแกแจแ, แ แแแแแแช แฃแ แแแแ แแฅแแแแแแก Retryer-แแแ REST API-แแก แแแจแแแแแแ. แแแกแ แซแแ แแแแแ แแแฎแแกแแแแแแแแแแ DLQ-แแแ แจแแขแงแแแแแแแแแแก แฎแแแแฎแแ แแแแแแแแ แแ แฌแแจแแ, แจแแชแแแแแก แแแคแแ แแแชแแแก แแแฎแแ แแ แจแแขแงแแแแแแแแแแก แซแแแแ, แแแแแแแแแ, แจแแชแแแแแก แกแแฎแแแแ.
แแแแแแแแ แฌแแแแแแก แแแแขแ แแแ แฉแแ แแฃแแแ แฉแแแแก แแแแกแขแแ แแแแ, แแฃแชแแแแแแแแ แแแแแขแแแแ แแแแแฎแแแแ แฌแแแแแ แแ แแแแแแ, แ แแแแแกแแช Retryer แฃแกแแแแก แแ แแแแชแแ แกแแจแฃแแแแแ Retryer-แก แแแฌแแ แแก DESTINATION แแแแแจแ. แแก แแ แแกแแกแแแแแแแแ, แแแแ แแ, แแแขแแ แแแแแก แแแแแก แแแแแแแแกแแแ แแแแกแฎแแแแแแแ, แฉแแแ แแแแฅแแก แกแ แฃแแคแแกแแแแแ DLQ แแ UI แแแก แกแแแแ แแแแแ.
แแ แแก แจแแแแฎแแแแแแ, แ แแแแกแแช แจแแแแกแฃแ แแแแแก แแแแฎแฃแแแแก แ แแแแแแแแ แแแแกแฎแแแแแแฃแแ แแแแฎแแแ แแแแแแ แฏแแฃแคแ, แ แแแแแแ แแแแแแแชแแแแ แแแแกแฎแแแแแแฃแ แแแแแแแก แแฎแแ แชแแแแแแแ. แจแแขแงแแแแแแแแก แฎแแแแฎแแแ แแแแฃแจแแแแแ Retryer-แแก แแแจแแแแแแ แแ แ-แแ แแ แแ แแแแแแแชแแแกแแแแก แแแแแแฌแแแแก แแแแ แแก แแฃแแแแแแขแก. แแแแกแแแ แแแแแก แแแกแแชแแแแ แแฅแแแแ แชแแแแ แแแแแก แฎแแแแฎแแแ แแแแฃแจแแแแแแกแแแแก. แจแแแแแแแแแ แแ แแแแแแแ แแแแแ แแแแแแแก แฌแแแแแฎแแ แจแแฃแซแแแ แแแแแ แแแแฎแแแ แแแแแก แงแแแแแแแแ แ แจแแแฆแฃแแแแก แแแ แแจแ.
แแแแฃแแแกแฎแแแแแ, แแก แแแแแแแ แแ แฃแแ แฃแแแแแงแแคแก แแแแแ แแแแแแก แคแฃแแฅแชแแแแแ แแแแก, แแฃแแชแ แแก แจแแแซแแแแ แแแแแแขแแก แแแแแแแชแแแก แแแแแงแแแแแแ
แแแแแงแแแแแก
แจแแแแแแ, แฉแแแ แแแแฅแแก แชแแแแ แแแแแแแชแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแแซแแแแก แแแแแแแแ แแ แจแแขแงแแแแแแแแแแก แแแแฃแจแแแแแ, แแฃ แ แแแแแแแ แแแ แ แกแแกแขแแแ แแ แแแแแ แแแฃแฌแแแแแแแแ.
แแแแแแแชแแแก แแ แ-แแ แแ แแแแแแ แ แฃแแแ แแขแแกแแแ แแก แแ แแก, แ แแ แแแกแ แแแแแงแแแแแ แจแแกแแซแแแแแแแ แแแ แ แกแแกแขแแแแแแก แแแแ , แ แแแแแแแช แแฃแจแแแแแ แแแแแ แแแคแแแก แแแแกแขแแ แแ, แแแแ แแฎแ แแแแ แแแแจแแแแแแแแแ แชแแแแแแแแแแก แแแ แแจแ! แแกแแ แแแแแแแชแแแก แแแกแญแแ แแแแ แแฎแแแแ แฎแแแแฎแแแ แชแแแก แแแแแจแ แฌแแแแแ, แ แแแแแแแแ แแแคแแแก แกแแแแฃแ แแก แจแแแกแแแ แแ แแแกแแฏแแก แแแแแแแแ แฎแแแแฎแแแ แแชแแแแแกแแแแก. แแ แแ แแก แกแแญแแ แ แ แแแแ แแแแแขแแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแฆแแแแ. แแ แแแแกแแแแแก, แ แแ แจแแแแแแชแแ แแแแแ แแแแแแแชแแแแแ Retryer-แแ แแ แฃแแแ แแแแแชแแแฃแแ แจแแขแงแแแแแแแแแแก แ แแแแแแแแ, แฉแแแ แแแแแแแแแแ แแแแแแแชแแแแ แฎแแแแแแแ แแแแแแแ แแ แฎแแแแฎแแ แแแแแแฃแจแแแแ แแกแแแ Consumer stop-แแก แแแจแแแแแแ.
แฌแงแแ แ: www.habr.com