Hey Habr.
เปเบกเบทเปเบญเบเปเปเบเบปเบเบกเบฒเบเบตเป I
เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบเบฑเบเบชเบฐเปเบซเบกเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบตเปเบชเบฑเบเบชเบปเบเบซเบผเบฒเบ. เปเบซเบเบเบปเบเบเบฒเบเบเบธเบฅเบฐเบเบดเบเบซเปเปเบขเบนเปเปเบ stack เปเบเบฑเบเปเบเปเบฅเบเบตเบเบตเปเบเบฑเบเบชเบฐเปเบซเบก, เปเบฅเปเบเบขเบนเปเปเบเบฎเบนเบเบเบฒเบ Docker เบเบธเปเบกเบเบญเบเปเบเบ orchestrator เปเบเบฑเปเบ Kubernetes เบซเบผเบท OpenShift, เปเบฅเบฐเบเบดเบเบเปเปเบชเบทเปเบชเบฒเบเบเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบญเบทเปเบเปเบซเบผเบทเบงเบดเบเบตเปเบเปเปเบเบงเบดเบชเบฒเบซเบฐเบเบดเบเปเบเบเบเปเบฒเบเบฅเบฐเบเบปเบเบเปเบญเบเปเบชเปเบเบญเบ routers เบเบฒเบเบเปเบฒเบเบฎเปเบฒเบเบเบฒเบเปเบฅเบฐ virtual. เปเบเบชเบฐเบเบฒเบเปเบงเบเบฅเปเบญเบกเบเบฑเปเบเบเปเบฒเบง, เบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเบฅเบฒเบเปเบเป, เบเบฑเปเบเบเบฑเปเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเปเบซเบเบเบฒเบเบเบทเบเปเบซเบกเปเบเปเบฒเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเปเปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบญเบเบเบฐเบเบงเบเบเบฒเบเบเบธเบฅเบฐเบเบดเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ.
เบกเบฑเบเปเบเบฑเบเปเบเบงเปเบเบเปเบญเบ Kafka
เบเปเบญเบเบซเบเปเบฒเบเบตเปเปเบเปเบเบเบเบฒเบเบเบงเบเปเบฎเบปเบฒเปเบเป IBM MQ เบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบก asynchronous. เบเปเบฒเบกเบตเบเปเปเบเบดเบเบเบฒเบเปเบเบตเบเบเบถเปเบเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบญเบเบเบฒเบเบเปเบฅเบดเบเบฒเบ, เบเปเปเบเบงเบฒเบกเบเบตเปเปเบเปเบฎเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเปเบชเปเปเบเปเบเบงเบเบปเบเบซเบกเบฒเบเบเบฒเบ (DLQ) เบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบนเปเบกเบทเบเบทเปเบกเบญเบตเบ. DLQ เบเบทเบเบชเปเบฒเบเบเบทเปเบเบขเบนเปเบเปเบฒเบเปเบเบงเบเบตเปเปเบเบปเปเบฒเบกเบฒ, เบเปเปเบเบงเบฒเบกเบเบทเบเปเบญเบเบเบฒเบเปเบ IBM MQ.
เบเปเบฒเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบกเปเบเบเบปเปเบงเบเบฒเบงเปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเปเบฒเบเบปเบเบกเบฑเบเปเบเป (เบเบปเบงเบขเปเบฒเบเปเบเบฑเปเบ ResourceAccessException เบขเบนเปเปเบเบเบฒเบเปเบ HTTP เบซเบผเบท MongoTimeoutException เบขเบนเปเปเบเบเปเบฒเบฎเปเบญเบเบเป MongoDb), เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเปเบซเบกเปเบเบฐเบกเบตเบเบปเบ. เปเบเบเบเปเปเบเปเบฒเบเบถเบเปเบเบดเบเปเบซเบเบเบปเบเบเบญเบเบชเบฒเบเบฒเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เบเปเปเบเบงเบฒเบกเบเบปเปเบเบชเบฐเบเบฑเบเปเบเปเบเบทเบเบเปเบฒเบเปเบเบขเบนเปเปเบเปเบเบงเบฅเบฐเบเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบตเปเบเบฑเบเบเปเบฒ, เบซเบผเบทเปเบเบซเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเปเบฎเบฑเบเบกเบฒเบเบปเบเปเบฅเปเบงเปเบเบทเปเบญเบชเบปเปเบเบเปเปเบเบงเบฒเบกเปเบซเบกเป. เบเบตเปเบเบฐเบเบญเบเบกเบตเบเปเบฒเบเบงเบเบเบฒเบเบชเบปเปเบเบเบทเบเปเบเบชเปเบงเบเบซเบปเบงเบเปเปเบเบงเบฒเบก, เปเบเบดเปเบเบเบนเบเบกเบฑเบเบเบฑเบเปเบฅเบเบฐเบเบฒเบเบเบฑเบเบเปเบฒเบซเบผเบทเบเบธเบเบชเบดเปเบเบชเบธเบเบเบญเบเบเบธเบเบเบฐเบชเบฒเบเบฅเบฐเบเบฑเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเปเบกเบฒเบฎเบญเบเบเบธเบเบชเบดเปเบเบชเบธเบเบเบญเบเบเบธเบเบเบฐเบชเบฒเบเปเบเปเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบเบเบฑเบเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเป, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเปเบเบงเบฒเบกเบเบฐเบเบทเบเบเบฑเบเปเบชเปเปเบ DLQ เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบเบเบนเปเบกเบท.
เบเบญเบเบซเบฒเบงเบดเบเบตเปเบเปเปเบ
เปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบฒเบเบเบปเบเบเบงเบเบเบทเบเปเบเบเบฒเบเบเบงเบเบเปเบฒเบเบงเบเบซเบฅเบฒเบ, เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเปเบญเบเบเปเปเบเบฐเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบเบเบฑเบเบซเบกเบปเบ. เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเปเบญเบเบงเปเบฒเบเบนเปเบเบฑเบเบเบฐเบเบฒ, เบเบญเบเปเบซเบเบทเบญเบเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบงเบฒเบกเบเปเบญเบเบเบฒเบเบเบญเบเบเบธเบฅเบฐเบเบดเบ, เบเบฐเบเปเบญเบเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบปเบเปเบเบเบตเปเปเบเปเบญเบฐเบเบดเบเบฒเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบทเบเปเบเบตเบเปเบเปเปเบเบเบธเปเบก Kafka, เบเปเบฒเบเบเบฐเบเปเบญเบเปเบเปเปเบงเบฅเบฒเปเบเบเบฒเบเบชเปเบฒเบเบซเบปเบงเบเปเปเปเบฅเบฐเบชเบฐเบซเบเบญเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบตเปเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบงเบเปเบเบปเบฒ. เบเบญเบเปเบซเบเบทเบญเปเบเบเบฒเบเบเบตเป, เบเปเบฒเบเบเบฐเบเปเบญเบเปเบฅเบทเบญเบเบเบฒเบฅเบฒเบกเบดเปเบเบต retention.ms เบเบตเปเบเบทเบเบเปเบญเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบซเบปเบงเบเปเป retry เปเบเบทเปเบญเปเบซเปเบเปเปเบเบงเบฒเบกเบกเบตเปเบงเบฅเบฒเบเบตเปเบเบฐ reent เปเบฅเบฐเบเปเปเบซเบฒเบเปเบเบเบฒเบเบกเบฑเบ. เบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบฅเบฐเบเบฒเบเบฎเปเบญเบเบเปเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฐเบเปเบญเบเบเปเปเบฒเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเปเบฅเบดเบเบฒเบเบเบตเปเบกเบตเบขเบนเปเปเบฅเปเบงเบซเบผเบทเปเบซเบกเป.
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบงเปเบฒเบเบปเบเปเบเปเบเบเบฒเบเบฎเบฝเบ spring เปเบเบเบเบปเปเบงเปเบเปเบฅเบฐเบเบฒเบเบฎเบฝเบ spring-kafka เปเบเบเบชเบฐเปเบเบฒเบฐเปเบกเปเบเบชเบฐเบซเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบฅเบฑเบ reprocessing เบเปเปเบเบงเบฒเบก. Spring-kafka เบกเบตเบเบฒเบเปเบเบดเปเบเบเบฒเบญเบฒเปเบชเปเบเบเบเปเบฒเบกเบเปเบฒเบเบเบญเบเบเบฒเบเบฎเบฝเบ spring-retry, เปเบเบดเปเบเบชเบฐเบซเบเบญเบเบเบฒเบเบเปเปเบกเบตเบเบปเบงเบเบปเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบธเปเบกเบเบญเบ BackOffPolicies เบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. เบเบตเปเปเบกเปเบเปเบเบทเปเบญเบเบกเบทเบเบตเปเบกเบตเบเบงเบฒเบกเบเบทเบเบซเบเบธเปเบเบเปเบชเบปเบกเบเบงเบ, เปเบเปเบเปเปเบเบปเบเบเปเบญเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบญเบเบกเบฑเบเปเบกเปเบเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบเบงเบฒเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบทเบเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบเบตเปเปเบฒเบเบเบงเบฒเบกเบงเปเบฒเบเบฒเบเบฃเบตเบชเบฐเบเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ เปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบญเบฑเบเปเบเบ เบซเบผเบทเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฐเบชเบปเปเบเบเบปเบเปเบซเปเบชเบนเบเปเบชเบเบเปเปเบเบงเบฒเบกเบเบฑเบเปเบปเบเบเบตเปเบเบฑเบเบฅเปเบเปเบฒเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบทเบเปเปเป. เปเบเบทเปเบญเบเบเบฒเบเบเบธเบเบเบตเปเปเบกเปเบเบชเปเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเบฅเบฐเบเบปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเบเบดเบเบฒเบฅเบฐเบเบฒเบกเบฑเบเบเบทเปเบกเบญเบตเบ.
spring-kafka เบเบปเบงเบเบญเบเบกเบฑเบเปเบญเบเบชเบฐเบซเบเบญเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบซเบผเบฒเบเบขเปเบฒเบเบเบญเบ ContainerAwareErrorHandler, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ
เบงเบดเบเบตเบเบฒเบเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเปเบเบงเบฒเบกเบเบตเปเบเบทเบเบเบธเบเปเบเปเบเบเบทเบเปเบซเบกเปเปเบเบทเปเบญเบขเบนเปเบฅเบญเบเบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบเปเบซเบกเปเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เปเบเปเบกเบฑเบเบเบฑเบเบเปเปเบกเบตเบเบปเบเปเบ DLQ. เบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฅเบทเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเปเบเบเบญเบเบเบปเปเบเบเบญเบ 2019, เปเบเบทเปเบญเบงเปเบฒเปเบเปเบเปเบเบตเบงเปเบฒ DLQ เบเบฐเบเปเปเบเปเบฒเปเบเบฑเบ (เบเบงเบเปเบฎเบปเบฒเปเบเบเบเบตเปเบฅเบฐเบเบปเบงเบเบดเบเปเบฅเปเบงเบเปเปเบเปเบญเบเบเบฒเบเบกเบฑเบเบซเบผเบฑเบเบเบฒเบเบซเบผเบฒเบเปเบเบทเบญเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบกเบตเบฅเบฐเบเบปเบเบเบฒเบเบเบธเบเปเบเปเบเบเบฑเปเบเบเปเบฒเบง). เบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบปเปเบงเบเบฒเบงเปเบฎเบฑเบเปเบซเป SeekToCurrentErrorHandler เปเบเปเปเป. เบเปเปเบเบดเบเบเบฒเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเปเบเปเบเบทเบเบเบดเบกเบญเบญเบเปเบเบเบฑเบเบเบถเบ, เบชเบปเปเบเบเบปเบเปเบซเปเบกเบตเบเบฒเบเบเบปเบเปเบเบตเบ, เปเบฅเบฐเบเบฒเบเบเบธเบเปเบเปเบเบชเบทเบเบเปเปเบเบฑเบเบเปเปเบเบงเบฒเบกเบเปเปเปเบ.
เบเบฒเบเบเบฑเบเบชเบดเบเปเบเบชเบธเบเบเปเบฒเบ
เบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบเบญเบตเบเปเบชเป SeekToCurrentErrorHandler เปเบเปเบเบฐเบเบธเปเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบฐเบเบฒเบเบปเบเปเบเบเบญเบเบเบปเบเปเบญเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเปเปเบเบงเบฒเบกเบเบทเบเปเบซเบกเป.
เบเปเบญเบเบญเบทเปเบ เปเบปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเปเบเปเบเบฐเบชเบปเบเบเบฒเบเบเบตเปเบกเบตเบขเบนเปเปเบฅเบฐเบเบฐเบซเบเบฒเบเบกเบฑเบเบเบทเปเบเบเบฑเบเปเบซเบเบเบปเบเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบกเปเบซเบเบเบปเบเปเบชเบฑเปเบ, เบกเบฑเบเบเบฐเปเบเบฑเบเบเบฒเบเบเบตเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบขเบธเบเบเบฒเบเบญเปเบฒเบเบเปเปเบเบงเบฒเบกเปเบซเบกเปเปเบเปเบฅเบเบฐเปเบงเบฅเบฒเบชเบฑเปเบเปเบเบตเปเบเปเบฒเบเบปเบเปเบเบเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบฅเบญเบเปเบซเบกเป. เบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบญเบทเปเบเป, เบเปเบญเบเบเปเบญเบเบเบฒเบเบเบธเบเบเบฝเบงเบเบตเปเบเบฐเบเบฑเบเบเบฑเบเปเบเปเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบฅเบญเบเปเบซเบกเป. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบธเบเบเบฝเบงเบเบตเปเบเปเบญเบเบกเบตเบซเบเปเบฒเบเบตเป DLQ เบชเปเบฒเบฅเบฑเบเบเบฑเบเบชเบญเบเบงเบดเบเบตเบเบฒเบ.
เบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบฅเบญเบเปเบซเบกเปเบเบญเบเบกเบฑเบเปเบญเบเบเปเบญเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ, เปเบเบดเปเบเบกเบตเบเบงเบฒเบกเบฎเบฑเบเบเบดเบเบเบญเบเปเบเบเบฒเบเบเบถเบเบเปเปเบกเบนเบเปเบฅเบเบฐเบเปเปเปเบเปเบกเบทเปเบญเบกเบตเบเปเปเบเบดเบเบเบฒเบเบเบปเปเบงเบเบฒเบงเปเบเบตเบเบเบทเปเบ.
เบเบฒเบเบขเบธเบเปเบเบปเบฒเบเบนเปเบเปเบฅเบดเปเบเบเบชเปเบฒเบฅเบฑเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ Linear Logic
เปเบกเบทเปเบญเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบฒเบเบฎเบฝเบ 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 เปเบกเปเบเปเบงเบฅเบฒเบเบตเปเบเบฐ restart MessageListenerContainer เบเปเบฒเบกเบฑเบเบเบฑเบเปเบฅเปเบเบขเบนเป. เบเบฒเบเปเบเบตเบเบเบปเบงเปเบซเบกเปเบเบฐเปเบเบตเบเบเบทเปเบเปเบเบเบฐเบเบนเปเปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเปเบเบตเบเบเบปเบงเปเบ TaskScheduler, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบชเบฐเบซเบเบญเบเปเบซเปเปเบเบเบเบฒเบเบฎเบฝเบ spring.
เบเบงเบเปเบฎเบปเบฒเบเบญเบเบซเบฒเบเปเบฒ retryAt เบเปเบงเบเบงเบดเบเบตเบเปเปเปเบเบเบตเป:
- เบกเบนเบเบเปเบฒเบเบญเบเปเบเบปเบฒเปเบเบตเบเบฒเบเปเบเบเบทเบเปเบกเปเบเปเบเบดเปเบเบเบถเปเบ.
- เบญเบตเบเบเบฒเบกเบเบฒเบเบเบฑเบเบกเบนเบเบเปเบฒ, เปเบฅเบเบฐเบเบฒเบเบเบฑเบเบเปเบฒเปเบเบเบฑเบเบเบธเบเบฑเบเปเบเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบฅเบญเบเปเบซเบกเปเปเบกเปเบเบเบญเบเบซเบฒ. เบเบธเบเบเบฐเบชเบฒเบเปเบเปเบเบทเบเบเบฐเบเบฒเบเบขเบนเปเปเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบปเบงเบกเบฑเบเปเบญเบ; เบเบงเบเปเบฎเบปเบฒเปเบฅเบทเบญเบเบฎเบนเบเปเบเบ JSON เปเบเบทเปเบญเปเบเบฑเบเบฎเบฑเบเบชเบฒเบกเบฑเบ.
- เปเบฅเบเบฐเบซเปเบฒเบเบเบตเปเบเบปเบเปเบซเบฑเบเบขเบนเปเปเบเบญเบฒเปเบฃ JSON เบเบฐเบเบญเบเบกเบตเบเปเบฒเบเบงเบเบงเบดเบเบฒเบเบตเบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเบฐเบเปเบญเบเบเปเปเบฒเบญเบตเบ. เบเปเบฒเบเบงเบเบงเบดเบเบฒเบเบตเบเบตเปเบเบทเบเปเบเบตเปเบกเปเบชเปเปเบงเบฅเบฒเบเบฐเบเบธเบเบฑเบเปเบเบทเปเบญเบชเปเบฒเบเบเปเบฒเบชเปเบฒเบฅเบฑเบ retryAt.
- เบเปเบฒเบเปเปเบเบปเบเปเบฅเบเบฐเบซเปเบฒเบ, เบเปเบฒเบเบญเบ retryAt เปเบกเปเบ null เปเบฅเบฐเบเปเปเบเบงเบฒเบกเบเบฐเบเบทเบเบชเบปเปเบเปเบเบซเบฒ DLQ เบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบนเปเบกเบท.
เบเปเบงเบเบงเบดเบเบตเบเบฒเบเบเบตเป, เบเบฑเบเบซเบกเบปเบเบเบตเปเบเบฑเบเปเบซเบผเบทเบญเปเบกเปเบเปเบเบทเปเบญเบเบฑเบเบเบถเบเบเปเบฒเบเบงเบเบเบฒเบเปเบเบเปเปเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเปเปเบเบงเบฒเบกเบเบตเปเบเปเบฒเบฅเบฑเบเบเปเบฒเปเบเบตเบเบเบฒเบ, เบเบปเบงเบขเปเบฒเบเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเบเบญเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบ. เบเบฒเบเบฎเบฑเบเบชเบฒเบเบฒเบเบเบฑเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเบเบทเบเปเบซเบกเปเปเบเบซเบเปเบงเบเบเบงเบฒเบกเบเปเบฒเปเบกเปเบเบเปเปเบชเปเบฒเบเบฑเบเบชเปเบฒเบฅเบฑเบเบงเบดเบเบตเบเบฒเบเบเบตเป, เปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบ logic เปเบชเบฑเปเบเบเปเปเบชเบฒเบกเบฒเบเบเบฑเบเบเบฒเบเบเบฒเบเบเบธเบเปเบเปเบเบเบฑเบเบซเบกเบปเบ. เบเปเปเบเบทเบเบฑเบเบเบฒเบเบฎเบฝเบ spring-retry, restart app เบเบฐเบเปเปเปเบฎเบฑเบเปเบซเปเบเปเปเบเบงเบฒเบกเบเบฑเบเบซเบกเบปเบเบเบตเปเบชเบนเบเปเบชเบเปเบเปเบเบทเปเบญ reprocessed, เปเบเปเบเบฝเบเปเบเปเบเบฐ restart เบเบธเบเบเบฐเบชเบฒเบ.
เบงเบดเบเบตเบเบฒเบเบเบตเปเบเปเบงเบเปเบญเบปเบฒเบเบฒเบเปเบซเบผเบเบญเบญเบเบเบฒเบเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบ, เปเบเบดเปเบเบญเบฒเบเบเบฐเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเปเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเปเบซเบผเบเบซเบเบฑเบเบซเบผเบฒเบ. เปเบเบเปเบฒเบชเบฑเบเบเปเบฒเบเปเบญเบทเปเบเป, เบเบญเบเปเบซเบเบทเบญเบเบฒเบเบเบฒเบเบเบธเบเปเบเปเบเปเบซเบกเป, เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบฅเบธเบเบฒเบเบเบฐเบเบดเบเบฑเบเบฎเบนเบเปเบเบ
เปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบเบญเบเปเบเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบกเปเบเบเบฝเบเปเบเป 1, เปเบฅเบฐเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเบฒเบเบขเบธเบเบฅเบฐเบเบปเบเปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบขเบธเบเบเบปเปเบงเบเบฒเบงเบเบญเบเปเบเบทเบญเบเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเปเบซเบกเปเบเบตเปเบกเบตเบเบงเบฒเบกเบฅเบฐเบญเบฝเบเบซเบผเบฒเบเบเบตเปเบกเบตเปเบฅเบเบฐเบเบฒเบ latency เบเบฐเบซเบเบฒเบเบเปเบญเบ. เบเบตเปเบญเบฒเบเบเบฐเบเปเปเปเบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฒเปเบเปเบเบธเปเบกเบเบฑเบเบซเบกเบปเบ, เบเบฑเปเบเบเบฑเปเบเบเบงเบฒเบกเบชเปเบฒเบเบฑเบเบฅเบฐเบซเบงเปเบฒเบเบเบญเบเปเบเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบฅเบฐเบเปเบฒเปเบฅเบเบฐเบซเปเบฒเบเบเปเบญเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบฑเบเปเบฅเบทเบญเบเปเบเบเบญเบตเบเปเบชเปเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเบฅเบฐเบเบปเบ.
เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบเบงเบฒเบกเบเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบตเปเบกเบตเปเบซเบเบเบปเบเบเบตเปเบเปเปเบเปเบฒเบเบปเบ
เบเบตเปเปเบกเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบฅเบฐเบซเบฑเบเบเบตเปเบชเบปเปเบเบเปเปเบเบงเบฒเบกเปเบเบซเบฒเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบฑเปเบเบเปเบฒเบง (Retryer), เปเบเบดเปเบเบเบฐเบชเบปเปเบเปเบเบเบตเปเบซเบปเบงเบเปเป 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 เปเบกเปเบเบเบปเบเปเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฝเบงเบเบฑเบเบเบฑเบเบเบปเบเปเบเบเบฒเบเบเบฐเบเบฒเบเบฒเบกเบเบทเบเปเปเปเบเปเบฒเบเบเบธเบเบขเบธเบเบเบญเบเบเบนเปเบเปเบฅเบดเปเบเบ. เบเบญเบเบเบฒเบ DESTINATION เปเบฅเบฐ RETRY_AT เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบ:
- GROUP_ID, เปเบเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเบธเปเบกเบเปเปเบเบงเบฒเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบนเปเบกเบทเปเบฅเบฐเบเบฒเบเบเบปเปเบเบซเบฒเบเบตเปเบเปเบฒเบเบเบฒเบ.
- ORIGINAL_PARTITION เปเบเบทเปเบญเบเบฐเบเบฒเบเบฒเบกเบฎเบฑเบเบชเบฒเบเบนเปเบเปเบฅเบดเปเบเบเบเบฝเบงเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบธเบเปเบเปเบเบเบทเบเปเบซเบกเป. เบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบตเปเบชเบฒเบกเบฒเบเปเบเบฑเบ null, เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เบเบฒเบเปเบเปเบเบเบฑเบเปเบซเบกเปเบเบฐเปเบเปเบฎเบฑเบเปเบเบเปเบเปเบเบธเปเบก record.key() เบเบญเบเบเปเปเบเบงเบฒเบกเบเบปเปเบเบชเบฐเบเบฑเบ.
- เบญเบฑเบเปเบเบเบเปเบฒ COUNTER เปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฒเบกเบเบธเบเบเบฐเบชเบฒเบเบเบฒเบเบฅเบญเบเบญเบตเบเบเบฑเปเบ.
- SEND_TO เปเบกเปเบเบเบปเบงเบเบตเปเบเบญเบเบเบปเบเบเบตเปเบงเปเบฒเบเปเปเบเบงเบฒเบกเบเบทเบเบชเบปเปเบเปเบเบทเปเบญเบเบฐเบกเบงเบเบเบปเบเบเบทเบเปเปเปเปเบกเบทเปเบญเบฎเบญเบ RETRY_AT เบซเบผเบทเบงเบฒเบเปเบงเปเปเบ DLQ.
- เปเบซเบเบเบปเบ - เปเบซเบเบเบปเบเบงเปเบฒเปเบเบฑเบเบซเบเบฑเบเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบเบงเบฒเบกเบเบทเบเบฅเบปเบเบเบงเบ.
Retryer เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเปเปเบเบงเบฒเบกเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบปเปเบเบเบทเบเปเบฅเบฐเบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเบงเบเบเบปเบเปเบญเบเปเบ PostgreSQL. เปเบเบทเปเบญเบเบเบฑเบเปเบงเบฅเบฒเปเบฅเบตเปเบกเบงเบฝเบเบเบฒเบเบเบตเปเบเบญเบเบซเบฒเบเปเปเบเบงเบฒเบกเบเปเบงเบ RETRY_AT เปเบฅเบฐเบชเบปเปเบเบเบงเบเบกเบฑเบเบเบฑเบเบเบทเบเปเบเบซเบฒเบเบฒเบเบชเปเบงเบ ORIGINAL_PARTITION เบเบญเบเบซเบปเบงเบเปเป DESTINATION เบเปเบงเบเบฅเบฐเบซเบฑเบ record.key().
เปเบกเบทเปเบญเบชเบปเปเบเปเบฅเปเบง, เบเปเปเบเบงเบฒเบกเบเบฐเบเบทเบเบฅเบถเบเบญเบญเบเบเบฒเบ PostgreSQL. เบเบฒเบเบงเบดเปเบเบฒเบฐเบเปเปเบเบงเบฒเบกเบเปเบงเบเบเบปเบเปเบญเบเปเบเบตเบเบเบถเปเบเปเบ UI เบเปเบฒเบเปเบเบตเปเบเบปเบงเบเบฑเบเบเบฑเบ Retryer เบเปเบฒเบ REST API. เบฅเบฑเบเบชเบฐเบเบฐเบเบปเปเบเบเปเบเบญเบเบกเบฑเบเปเบกเปเบเบเบฒเบเบชเบปเปเบเบเบทเบเบซเบผเบทเบฅเบถเบเบเปเปเบเบงเบฒเบกเบเบฒเบ DLQ, เปเบเบดเปเบเบเปเปเบกเบนเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเปเบฅเบฐเบเบฒเบเบเบญเบเบซเบฒเบเปเปเบเบงเบฒเบก, เบเบปเบงเบขเปเบฒเบเปเบเบเบเบทเปเบเปเปเบเบดเบเบเบฒเบ.
เปเบเบทเปเบญเบเบเบฒเบเบเบฒเบเบเบงเบเบเบธเบกเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเปเบเปเบเบทเบเปเบเบตเบเปเบเปเบขเบนเปเปเบเบเบธเปเบกเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เบกเบฑเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบฎเปเบญเบเบเปเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบซเบปเบงเบเปเปเบเบตเป Retryer เบเปเบฒเบฅเบฑเบเบเบฑเบเบเบทเปเบกเบญเบตเบ, เปเบฅเบฐเบญเบฐเบเบธเบเบฒเบเปเบซเป Retryer เบเบฝเบเปเบเบซเบฒเบซเบปเบงเบเปเป DESTINATION. เบเบตเปเปเบกเปเบเบเบงเบฒเบกเบเปเปเบชเบฐเบเบงเบ, เปเบเป, เบเปเปเปเบซเบกเบทเบญเบเบเบฑเบเบงเบดเบเบตเบเบฒเบเบซเบปเบงเบเปเปเปเบฅเบเบฐเบซเปเบฒเบ, เบเบงเบเปเบฎเบปเบฒเบกเบต DLQ เปเบฅเบฐ UI เปเบเบฑเบกเบฎเบนเบเปเบเบเปเบเบทเปเบญเบเบฑเบเบเบฒเบเบกเบฑเบ.
เบกเบตเบเบฒเบเบเปเบฅเบฐเบเบตเปเบกเบทเปเบญเบซเบปเบงเบเปเปเบเบตเปเปเบเบปเปเบฒเบกเบฒเบเบทเบเบญเปเบฒเบเปเบเบเบเบธเปเบกเบเบนเปเบเปเบฅเบดเปเบเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบซเบผเบฒเบ, เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบฐเบเบดเบเบฑเบเปเบซเบเบเบปเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ. เบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบเบงเบฒเบกเบเบทเบเปเปเปเบเปเบฒเบ Retryer เบชเบณเบฅเบฑเบเปเบถเปเบเปเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบซเบผเบปเปเบฒเบเบตเปเบเบฐเบชเบปเปเบเบเบปเบเปเบซเปเบเปเบณเบเบฑเบเบญเบตเบเบญเบฑเบเปเบถเปเบ. เปเบเบทเปเบญเบเปเบญเบเบเบฑเบเบเบตเป, เบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบเบซเบปเบงเบเปเปเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบธเบเปเบเปเบเบเบทเบเปเบซเบกเป. เบซเบปเบงเบเปเปเบเบตเปเปเบเบปเปเบฒเบกเบฒเปเบฅเบฐเบฅเบญเบเปเบซเบกเปเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเปเปเบเบเบเบนเปเบเปเบฅเบดเปเบเบเบเบฝเบงเบเบฑเบเปเบเบเบเปเปเบกเบตเบเปเปเบเปเบฒเบเบฑเบเปเบเป.
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบงเบดเบเบตเบเบฒเบเบเบตเปเบเปเปเปเบเปเบชเบฐเบซเบเบญเบเบเบฒเบเบเปเบฒเบเบฒเบเบเบญเบ breaker เบงเบปเบเบเบญเบ, เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบกเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฒเบเบเปเบฒเปเบเป
เบชเบฐเบซเบฅเบธเบ
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบเปเปเบฒเบเบฒเบเบเบฐเบกเบงเบเบเบปเบเบเปเปเบเบงเบฒเบกเบเปเบฒเบซเบฒเบเบงเปเบฒเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบเปเบเบเปเปเบชเบฒเบกเบฒเบเปเบเปเปเบเปเบเบปเปเบงเบเบฒเบง.
เบซเบเบถเปเบเปเบเบเปเปเปเบเปเบเบฝเบเบเบปเปเบเบเปเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบกเปเบเบงเปเบฒเบกเบฑเบเบชเบฒเบกเบฒเบเบเบทเบเบเปเบฒเปเบเปเปเบเบเบฅเบฐเบเบปเบเบเบฒเบเบเบญเบเบเบตเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบธเปเบก Kafka เบเบฝเบงเบเบฑเบ, เปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฑเบเปเบเบเบเบตเปเบชเปเบฒเบเบฑเบเบขเบนเปเบเปเบฒเบเบเบญเบเบเบงเบเปเบเบปเบฒ! เบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฑเปเบเบเปเบฒเบงเบเบฝเบเปเบเปเบเบฐเบเปเบญเบเปเบเบปเปเบฒเปเบเบดเบเบซเบปเบงเบเปเป retry, เบเบทเปเบกเบเปเปเบกเบนเบเปเบชเปเปเบเบเบฒเบเบชเปเบงเบเบซเบปเบง Kafka เปเบฅเบฐเบชเบปเปเบเบเปเปเบเบงเบฒเบกเปเบเบซเบฒ Retryer. เบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบปเบเบชเบนเบเปเบเบเบชเปเบฒเบเบเบทเปเบเบเบฒเบเปเบเป. เปเบฅเบฐเปเบเบทเปเบญเบซเบผเบธเบเบเปเบญเบเบเปเบฒเบเบงเบเบเปเปเบเบงเบฒเบกเบเบตเปเบเบทเบเปเบญเบเบเบฒเบเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเปเบเบซเบฒ Retryer เปเบฅเบฐเบเบฑเบเบเบทเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบเปเบฒเบเบปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบกเบตเปเบซเบเบเบปเบเปเบชเบฑเปเบเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบเบทเบเปเบซเบกเปเปเบเบเบเปเบฒเบเบเบฒเบเบขเบธเบเบเบญเบเบเบนเปเบเปเบฅเบดเปเบเบ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com