рдХрд╛рдлреНрдХрд╛рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдирд╛рдВрдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ

рдХрд╛рдлреНрдХрд╛рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдирд╛рдВрдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ

рдЕрд╣реЛ рд╣рдмреНрд░.

рдЕрд▓реАрдХрдбреЗ рдЖрдп рддреНрдпрд╛рдЪрд╛ рдЕрдиреБрднрд╡ рд╢реЗрдЕрд░ рдХреЗрд▓рд╛ рдЧреЕрд░рдВрдЯреАрдб рдбрд┐рд▓рд┐рд╡реНрд╣рд░реАрдЪреНрдпрд╛ рдЬрд╡рд│ рдЬрд╛рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдХрд╛рдлреНрдХрд╛ рдЙрддреНрдкрд╛рджрдХ рдЖрдгрд┐ рдЧреНрд░рд╛рд╣рдХ рдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдЯреАрдо рдореНрд╣рдгреВрди рдХреЛрдгрддреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╡рд╛рдкрд░рддреЛ. рдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧреВ рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рдЖрдореНрд╣реА рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реАрдЪреНрдпрд╛ рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рдЕрдиреБрдкрд▓рдмреНрдзрддреЗрдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди рдХрд╛рдлреНрдХрд╛рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╢реА рдЖрдпреЛрдЬрд┐рдд рдХреЗрд▓реА.

рдЖрдзреБрдирд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрддрд┐рд╢рдп рдЬрдЯрд┐рд▓ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рдЖрдзреБрдирд┐рдХ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреНрдпрд╛ рд╕реНрдЯреЕрдХрдордзреНрдпреЗ рдЧреБрдВрдбрд╛рд│рд▓реЗрд▓реЗ рд╡реНрдпрд╡рд╕рд╛рдп рд▓реЙрдЬрд┐рдХ, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХрд┐рдВрд╡рд╛ рдУрдкрдирд╢рд┐рдлреНрдЯ рд╕рд╛рд░рдЦреНрдпрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░рджреНрд╡рд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЙрдХрд░ рдЗрдореЗрдЬрдордзреНрдпреЗ рдЪрд╛рд▓рдд рдЖрд╣реЗ рдЖрдгрд┐ рднреМрддрд┐рдХ рдЖрдгрд┐ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рд░рд╛рдЙрдЯрд░рдЪреНрдпрд╛ рд╕рд╛рдЦрд│реАрджреНрд╡рд╛рд░реЗ рдЗрддрд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдХрд┐рдВрд╡рд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕рд╢реА рд╕рдВрдкреНрд░реЗрд╖рдг рдХрд░рдд рдЖрд╣реЗ. рдЕрд╢рд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд, рдХрд╛рд╣реАрддрд░реА рдиреЗрд╣рдореА рдЦрдВрдбрд┐рдд рд╣реЛрдК рд╢рдХрддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдПрдЦрд╛рджреА рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реА рдЕрдиреБрдкрд▓рдмреНрдз рдЕрд╕рд▓реНрдпрд╛рд╕ рдШрдЯрдирд╛рдВрдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рд╣рд╛ рдЖрдордЪреНрдпрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪрд╛ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ.

рдХрд╛рдлреНрдХрд╛рдЪреНрдпрд╛ рдЖрдзреА рддреЗ рдХрд╕реЗ рд╣реЛрддреЗ

рдпрд╛рдЖрдзреА рдкреНрд░реЛрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдЖрдореНрд╣реА рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЗрд╕реЗрдЬ рдбрд┐рд▓рд┐рд╡реНрд╣рд░реАрд╕рд╛рдареА IBM MQ рд╡рд╛рдкрд░рд▓рд╛ рд╣реЛрддрд╛. рд╕реЗрд╡реЗрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рджрд░рдореНрдпрд╛рди рдХреЛрдгрддреАрд╣реА рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рд╕рдВрджреЗрд╢ рдкреБрдвреАрд▓ рдореЕрдиреНрдпреБрдЕрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧрд╕рд╛рдареА рдбреЗрдб-рд▓реЗрдЯрд░-рдХреНрдпреВ (DLQ) рдордзреНрдпреЗ рдареЗрд╡рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рд░рд╛рдВрдЧреЗрдЪреНрдпрд╛ рдкреБрдвреЗ DLQ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рд╣реЛрддрд╛, рд╕рдВрджреЗрд╢ IBM MQ рдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЛрддрд╛.

рдЬрд░ рддреНрд░реБрдЯреА рддрд╛рддреНрдкреБрд░рддреА рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреА рдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВ рд╢рдХрд▓реЛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, HTTP рдХреЙрд▓рд╡рд░реАрд▓ ResourceAccessException рдХрд┐рдВрд╡рд╛ MongoDb рд╡рд┐рдирдВрддреАрд╡рд░ MongoTimeoutException), рддрд░ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреЗ рдзреЛрд░рдг рдкреНрд░рднрд╛рд╡реА рд╣реЛрдИрд▓. рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рдмреНрд░рдБрдЪрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХрдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛, рдореВрд│ рд╕рдВрджреЗрд╢ рдПрдХрддрд░ рд╡рд┐рд▓рдВрдмрд╛рдиреЗ рдкрд╛рдард╡рд▓реНрдпрд╛рдмрджреНрджрд▓ рд╕рд┐рд╕реНрдЯрдо рд░рд╛рдВрдЧреЗрдд рд╣рд▓рд╡рд┐рд▓рд╛ рдЧреЗрд▓рд╛ рдХрд┐рдВрд╡рд╛ рд╕рдВрджреЗрд╢ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рд╣рд▓рд╡рд┐рд▓рд╛ рдЧреЗрд▓рд╛. рдпрд╛рдордзреНрдпреЗ рдореЗрд╕реЗрдЬ рд╣реЗрдбрд░рдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рд▓реЗрд▓реНрдпрд╛ рдирдВрдмрд░рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, рдЬреЛ рд╡рд┐рд▓рдВрдм рдордзреНрдпрд╛рдВрддрд░ рдХрд┐рдВрд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ-рд╕реНрддрд░ рдзреЛрд░рдгрд╛рдЪреНрдпрд╛ рд╕рдорд╛рдкреНрддреАрд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ рдЖрд╣реЗ. рдЬрд░ рдЖрдореНрд╣реА рд░рдгрдиреАрддреАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдкреЛрд╣реЛрдЪрд▓реЛ рдЖрд╣реЛрдд рдкрд░рдВрддреБ рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реА рдЕрджреНрдпрд╛рдк рдЕрдиреБрдкрд▓рдмреНрдз рдЖрд╣реЗ, рддрд░ рдореЕрдиреНрдпреБрдЕрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧрд╕рд╛рдареА рд╕рдВрджреЗрд╢ DLQ рдордзреНрдпреЗ рдареЗрд╡рд▓рд╛ рдЬрд╛рдИрд▓.

рдЙрдкрд╛рдп рд╢реЛрдзрдгреЗ

рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рд╢реЛрдзрдд рдЖрд╣реЗ, рдЖрдкрдг рдЦрд╛рд▓реАрд▓ рд╢реЛрдзреВ рд╢рдХрддрд╛ ╤А╨╡╤И╨╡╨╜╨╕╨╡. рдереЛрдбрдХреНрдпрд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд▓рдВрдм рдЕрдВрддрд░рд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╖рдп рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдмрд╛рдЬреВрд▓рд╛ рдЧреНрд░рд╛рд╣рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд╛рдЧреВ рдХрд░рдгреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдЖрд╣реЗ, рдЬреЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд▓рдВрдмрд╛рд╕рд╣ рд╕рдВрджреЗрд╢ рд╡рд╛рдЪрддреАрд▓.

рдХрд╛рдлреНрдХрд╛рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдирд╛рдВрдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ

рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдиреЗ рдЕрд╕реВрдирд╣реА, рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрддреЗ рдХреА рддреЗ рдкреВрд░реНрдгрдкрдгреЗ рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реЗ рдирд╛рд╣реА. рд╕рд░реНрд╡ рдкреНрд░рдердо, рдХрд╛рд░рдг рд╡рд┐рдХрд╕рдХрд╛рд▓рд╛, рд╡реНрдпрд╡рд╕рд╛рдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрд░рд╛рдЪ рд╡реЗрд│ рдШрд╛рд▓рд╡рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЬрд░ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг рд╕рдХреНрд╖рдо рдХреЗрд▓реЗ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рд╖рдп рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдереЛрдбрд╛ рд╡реЗрд│ рджреНрдпрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рдпрд╛ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рддреБрдореНрд╣рд╛рд▓рд╛ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╖рдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп retention.ms рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд╡рдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рд╕рдВрджреЗрд╢рд╛рдВрдирд╛ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдорд┐рд│реЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдЕрджреГрд╢реНрдп рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА. рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рджреНрдпрдорд╛рди рдХрд┐рдВрд╡рд╛ рдирд╡реАрди рд╕реЗрд╡реЗрд╕рд╛рдареА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЖрдгрд┐ рдкреНрд░рд╡реЗрд╢рд╛рдЪреА рд╡рд┐рдирдВрддреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓.

рдЖрддрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЖрдгрд┐ рд╡рд┐рд╢реЗрд╖рдд: рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХрд╛рдлреНрдХрд╛ рд╕рдВрджреЗрд╢рд╛рдЪреНрдпрд╛ рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛рд╕рд╛рдареА рдХреЛрдгрддреА рдпрдВрддреНрд░рдгрд╛ рдкреБрд░рд╡рддрд╛рдд рддреЗ рдкрд╛рд╣реВ. рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХрд╛рдлреНрдХрд╛рдордзреНрдпреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕рд╛рд╡рд░ рдПрдХ рд╕рдВрдХреНрд░рдордгрд╛рддреНрдордХ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЖрд╣реЗ, рдЬреЗ рд╡рд┐рд╡рд┐рдз рдмреЕрдХрдСрдл рдкреЙрд▓рд┐рд╕реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рд╣реЗ рдмрд░реНтАНрдпрд╛рдкреИрдХреА рд▓рд╡рдЪрд┐рдХ рд╕рд╛рдзрди рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рдореНрд╣рдгрдЬреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдорд░реАрдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрджреЗрд╢ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЕрдкрдбреЗрдЯ рдХрд┐рдВрд╡рд╛ рдСрдкрд░реЗрд╢рдирд▓ рдПрд░рд░рдореБрд│реЗ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗрд▓реНрдпрд╛рдиреЗ рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд▓рдВрдмрд┐рдд рдЕрд╕рд▓реЗрд▓реЗ рд╕рд░реНрд╡ рд╕рдВрджреЗрд╢ рдирд╖реНрдЯ рд╣реЛрддреАрд▓. рд╣рд╛ рдореБрджреНрджрд╛ рдЖрдордЪреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реАрд╕рд╛рдареА рдЧрдВрднреАрд░ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рддреНрдпрд╛рдЪрд╛ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдирд╛рд╣реА.

spring-kafka рд╕реНрд╡рддрдГ ContainerAwareErrorHandler рдЪреА рдЕрдиреЗрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде SeekToCurrentErrorHandler, рдЬреНрдпрд╛рджреНрд╡рд╛рд░реЗ рддреБрдореНрд╣реА рддреНрд░реБрдЯреАрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдСрдлрд╕реЗрдЯ рди рд╣рд▓рд╡рддрд╛ рдирдВрддрд░ рд╕рдВрджреЗрд╢рд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реВ рд╢рдХрддрд╛. рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХрд╛рдлреНрдХрд╛ 2.3 рдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреАрдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрди, рдмреЕрдХрдСрдл рдкреЙрд▓рд┐рд╕реА рд╕реЗрдЯ рдХрд░рдгреЗ рд╢рдХреНрдп рдЭрд╛рд▓реЗ.

рд╣рд╛ рджреГрд╖реНрдЯреАрдХреЛрди рд░реАрдкреНрд░реЛрд╕реЗрд╕реНрдб рд╕рдВрджреЗрд╢рд╛рдВрдирд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдЯрд┐рдХреВрди рд░рд╛рд╣рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ, рдкрд░рдВрддреБ рдЕрджреНрдпрд╛рдк рдХреЛрдгрддреАрд╣реА DLQ рдпрдВрддреНрд░рдгрд╛ рдирд╛рд╣реА. рдЖрдореНрд╣реА 2019 рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рд╣рд╛ рдкрд░реНрдпрд╛рдп рдирд┐рд╡рдбрд▓рд╛, рдЖрд╢рд╛рд╡рд╛рджреАрдкрдгреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рд▓рд╛ рдХреА DLQ рдЪреА рдЧрд░рдЬ рднрд╛рд╕рдгрд╛рд░ рдирд╛рд╣реА (рдЖрдореНрд╣реА рдирд╢реАрдмрд╡рд╛рди рд╣реЛрддреЛ рдЖрдгрд┐ рдЕрд╢рд╛ рд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╣ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдкрд░реЗрдЯ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдЕрдиреЗрдХ рдорд╣рд┐рдиреНрдпрд╛рдВрдирдВрддрд░ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдпрд╛рдЪреА рдЧрд░рдЬ рдирд╡реНрд╣рддреА). рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рддреНрд░реБрдЯреАрдВрдореБрд│реЗ SeekToCurrentErrorHandler рдлрд╛рдпрд░ рдЭрд╛рд▓рд╛. рдЙрд░реНрд╡рд░рд┐рдд рддреНрд░реБрдЯреА рд▓реЙрдЧрдордзреНрдпреЗ рдореБрджреНрд░рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛, рдкрд░рд┐рдгрд╛рдореА рдСрдлрд╕реЗрдЯ рдЭрд╛рд▓рд╛ рдЖрдгрд┐ рдкреБрдвреАрд▓ рд╕рдВрджреЗрд╢рд╛рд╕рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд▓реВ рд░рд╛рд╣рд┐рд▓реА.

рдЕрдВрддрд┐рдо рдирд┐рд░реНрдгрдп

SeekToCurrentErrorHandler рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрджреЗрд╢ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдпрдВрддреНрд░рдгрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╡реГрддреНрдд рдХреЗрд▓реЗ.

рд╕рд░реНрд╡ рдкреНрд░рдердо, рдЖрдореНрд╣рд╛рд▓рд╛ рд╡рд┐рджреНрдпрдорд╛рди рдЕрдиреБрднрд╡ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рд╣реЛрддрд╛ рдЖрдгрд┐ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рддрд░реНрдХрд╛рдиреБрд╕рд╛рд░ рддреНрдпрд╛рдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рд╛рдпрдЪрд╛ рд╣реЛрддрд╛. рд░реЗрдЦреАрдп рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕рд╛рдареА, рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдзреЛрд░рдгрд╛рджреНрд╡рд╛рд░реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрд▓реНрдк рдХрд╛рд▓рд╛рд╡рдзреАрд╕рд╛рдареА рдирд╡реАрди рд╕рдВрджреЗрд╢ рд╡рд╛рдЪрдгреЗ рдерд╛рдВрдмрд╡рдгреЗ рдЗрд╖реНрдЯрддрдо рдЕрд╕реЗрд▓. рдЗрддрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА, рдорд▓рд╛ рдПрдХрдЪ рдмрд┐рдВрджреВ рд╣рд╡рд╛ рд╣реЛрддрд╛ рдЬреЛ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдзреЛрд░рдгрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░реЗрд▓. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпрд╛ рд╕рд┐рдВрдЧрд▓ рдкреЙрдЗрдВрдЯрдордзреНрдпреЗ рджреЛрдиреНрд╣реА рдкрдзреНрджрддреАрдВрд╕рд╛рдареА DLQ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреЗ рдзреЛрд░рдг рд╕реНрд╡рддрдГрдЪ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рддрд╛рддреНрдкреБрд░рддреА рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕ рдкреБрдвреАрд▓ рдордзреНрдпрд╛рдВрддрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ.

рд▓рд┐рдирд┐рдпрд░ рд▓реЙрдЬрд┐рдХ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ рдерд╛рдВрдмрд╡рдгреЗ

рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХрд╛рдлреНрдХрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рдЧреНрд░рд╛рд╣рдХрд╛рд▓рд╛ рдерд╛рдВрдмрд╡рдгреНрдпрд╛рдЪрд╛ рдХреЛрдб рдХрджрд╛рдЪрд┐рдд рдпрд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ:

public void pauseListenerContainer(MessageListenerContainer listenerContainer, 
                                   Instant retryAt) {
        if (nonNull(retryAt) && listenerContainer.isRunning()) {
            listenerContainer.stop();
            taskScheduler.schedule(() -> listenerContainer.start(), retryAt);
            return;
        }
        // to DLQ
    }

рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, MessageListenerContainer рдЕрдЬреВрдирд╣реА рдЪрд╛рд▓реВ рдЕрд╕рд▓реНрдпрд╛рд╕ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдореНрд╣рдгрдЬреЗ retryAt. рдЯрд╛рд╕реНрдХрд╢реЗрдбреНрдпреБрд▓рд░рдордзреНрдпреЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдереНрд░реЗрдбрдордзреНрдпреЗ рд░реА-рд▓рд╛рдБрдЪ рд╣реЛрдИрд▓, рдЬреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рджреЗрдЦреАрд▓ рд╕реНрдкреНрд░рд┐рдВрдЧрджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЬрд╛рддреЗ.

рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдкреНрд░рдХрд╛рд░реЗ retryAt рдореВрд▓реНрдп рдЖрдврд│рддреЗ:

  1. рд░реА-рдХреЙрд▓ рдХрд╛рдЙрдВрдЯрд░рдЪреЗ рдореВрд▓реНрдп рдкрд╛рд╣рд┐рд▓реЗ рдЬрд╛рддреЗ.
  2. рдХрд╛рдЙрдВрдЯрд░ рд╡реНрд╣реЕрд▓реНрдпреВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд░рдгрдиреАрддреАрдордзреНрдпреЗ рд╕рдзреНрдпрд╛рдЪрд╛ рд╡рд┐рд▓рдВрдм рдордзреНрдпрд╛рдВрддрд░ рд╢реЛрдзрд▓рд╛ рдЬрд╛рддреЛ. рд░рдгрдиреАрддреА рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗрдЪ рдШреЛрд╖рд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ; рдЖрдореНрд╣реА рддреЗ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА JSON рд╕реНрд╡рд░реВрдк рдирд┐рд╡рдбрд▓реЗ рдЖрд╣реЗ.
  3. JSON рдЕреЕрд░реЗрдордзреНрдпреЗ рд╕рд╛рдкрдбрд▓реЗрд▓реНрдпрд╛ рдордзреНрдпрд╛рдВрддрд░рд╛рдордзреНрдпреЗ рд╕реЗрдХрдВрджрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЕрд╕рддреЗ рдЬреНрдпрд╛рдирдВрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдиреНрд╣рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. retryAt рдЪреЗ рдореВрд▓реНрдп рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рд╕реЗрдХрдВрджрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╡реЗрд│реЗрдд рдЬреЛрдбрд▓реА рдЬрд╛рддреЗ.
  4. рдЬрд░ рдордзреНрдпрд╛рдВрддрд░ рдЖрдврд│рд▓реЗ рдирд╛рд╣реА, рддрд░ retryAt рдЪреЗ рдореВрд▓реНрдп рд╢реВрдиреНрдп рдЖрд╣реЗ рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧрд╕рд╛рдареА рд╕рдВрджреЗрд╢ DLQ рд╡рд░ рдкрд╛рдард╡рд┐рд▓рд╛ рдЬрд╛рдИрд▓.

рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рд╕рд╣, рд╕рдзреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢рд╛рд╕рд╛рдареА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдХреЙрд▓рдЪреА рд╕рдВрдЦреНрдпрд╛ рдЬрддрди рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдорд░реАрдордзреНрдпреЗ. рдореЗрдорд░реАрдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрдирд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдареЗрд╡рдгреЗ рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рд╕рд╛рдареА рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╛рд╣реА, рдХрд╛рд░рдг рдПрдХ рд░реЗрдЦреАрдп рддрд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рд╛рддрд╛рд│реВ рд╢рдХрдд рдирд╛рд╣реА. рд╕реНрдкреНрд░рд┐рдВрдЧ-рдкреБрдирд░реНрдкреНрд░рдпрд╛рд╕рд╛рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХреЗрд▓реНрдпрд╛рдиреЗ рд╕рд░реНрд╡ рд╕рдВрджреЗрд╢ рдЧрдорд╛рд╡рд▓реЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рд╕реНрдЯреНрд░реЕрдЯреЗрдЬреА рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╣реЛрдИрд▓.

рд╣рд╛ рджреГрд╖реНрдЯреАрдХреЛрди рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реАрдЪрд╛ рднрд╛рд░ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рддреЛ, рдЬреЛ рдЦреВрдк рдЬрд╛рд╕реНрдд рднрд╛рд░рд╛рдореБрд│реЗ рдЕрдиреБрдкрд▓рдмреНрдз рдЕрд╕реВ рд╢рдХрддреЛ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рдкреЕрдЯрд░реНрдирдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рд╛рдзреНрдп рдХреЗрд▓реА рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░.

рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдПрд░рд░ рдереНрд░реЗрд╢реЛрд▓реНрдб рдлрдХреНрдд 1 рдЖрд╣реЗ рдЖрдгрд┐ рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯреЗрдЬрдореБрд│реЗ рд╕рд┐рд╕реНрдЯрдо рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд▓рд╣рд╛рди рд▓реЗрдЯрдиреНрд╕реА рдордзреНрдпрд╛рдВрддрд░рд╛рдВрд╕рд╣ рдПрдХ рдЕрддрд┐рд╢рдп рдмрд╛рд░реАрдХ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреЗ рдзреЛрд░рдг рд╡рд╛рдкрд░рддреЛ. рд╣реЗ рд╕рд░реНрд╡ рдЧрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрд╕рд╛рдареА рдпреЛрдЧреНрдп рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реА, рдореНрд╣рдгреВрди рддреНрд░реБрдЯреА рдереНрд░реЗрд╢реЛрд▓реНрдб рдЖрдгрд┐ рдордзреНрдпрд╛рдВрддрд░ рдореВрд▓реНрдп рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рд╕рдВрдмрдВрдз рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд┐рд╡рдбрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рдиреЙрди-рдбрд┐рдЯрд░рдорд┐рдирд┐рд╕реНрдЯрд┐рдХ рд▓реЙрдЬрд┐рдХрд╕рд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдордзреАрд▓ рд╕рдВрджреЗрд╢рд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рдпреЗрдереЗ рдХреЛрдбрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ рдЬреЗ рдЕрд╢рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рддреЗ (рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгрд╛рд░реНтАНрдпрд╛), рдЬреЗ RETRY_AT рд╡реЗрд│ рд╕рдВрдкрд▓реНрдпрд╛рд╡рд░ DESTINATION рд╡рд┐рд╖рдпрд╛рд╡рд░ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рд▓реЗ рдЬрд╛рдИрд▓:


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 рдкреБрдиреНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдорд╛рди рдЧреНрд░рд╛рд╣рдХ рдареЗрд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рд╣реЗ рдкреЕрд░рд╛рдореАрдЯрд░ рд╢реВрдиреНрдп рдЕрд╕реВ рд╢рдХрддреЗ, рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдореВрд│ рд╕рдВрджреЗрд╢рд╛рдЪреА record.key() рдХреА рд╡рд╛рдкрд░реВрди рдирд╡реАрди рд╡рд┐рднрд╛рдЬрди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.
  • рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдзреЛрд░рдгрд╛рдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА COUNTER рдореВрд▓реНрдп рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗ.
  • SEND_TO рд╣рд╛ рд╕рдВрджреЗрд╢ RETRY_AT рд╡рд░ рдкреЛрд╣реЛрдЪрд▓реНрдпрд╛рд╡рд░ рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рдкрд╛рдард╡рд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ DLQ рдордзреНрдпреЗ рдареЗрд╡рд▓рд╛ рдЖрд╣реЗ рд╣реЗ рджрд░реНрд╢рд╡рд┐рддреЗ.
  • рдХрд╛рд░рдг - рд╕рдВрджреЗрд╢ рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рд╡реНрдпрддреНрдпрдп рдпреЗрдгреНрдпрд╛рдЪреЗ рдХрд╛рд░рдг.

рд░реАрдЯреНрд░рд╛рдпрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓рдордзреНрдпреЗ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧрд╕рд╛рдареА рд╕рдВрджреЗрд╢ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ. рдПрдХ рдЯрд╛рдпрдорд░ рдПрдХ рдХрд╛рд░реНрдп рд╕реБрд░реВ рдХрд░рддреЛ рдЬреЛ RETRY_AT рд╕рд╣ рд╕рдВрджреЗрд╢ рд╢реЛрдзрддреЛ рдЖрдгрд┐ рдХреА record.key() рд╕рд╣ DESTINATION рд╡рд┐рд╖рдпрд╛рдЪреНрдпрд╛ ORIGINAL_PARTITION рд╡рд┐рднрд╛рдЬрдирд╛рд╡рд░ рдкрд░рдд рдкрд╛рдард╡рддреЛ.

рдПрдХрджрд╛ рдкрд╛рдард╡рд▓реНрдпрд╛рдирдВрддрд░, рд╕рдВрджреЗрд╢ PostgreSQL рд╡рд░реВрди рд╣рдЯрд╡рд▓реЗ рдЬрд╛рддрд╛рдд. рд╕рдВрджреЗрд╢рд╛рдВрдЪреЗ рдореЕрдиреНрдпреБрдЕрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрдХрд╛ рд╕рд╛рдзреНрдпрд╛ UI рдордзреНрдпреЗ рд╣реЛрддреЗ рдЬреЗ REST API рджреНрд╡рд╛рд░реЗ Retryer рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддреЗ. рддреНрдпрд╛рдЪреА рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ DLQ рд╡рд░реВрди рд╕рдВрджреЗрд╢ рдкреБрдиреНрд╣рд╛ рдкрд╛рдард╡рдгреЗ рдХрд┐рдВрд╡рд╛ рд╣рдЯрд╡рдгреЗ, рддреНрд░реБрдЯреА рдорд╛рд╣рд┐рддреА рдкрд╛рд╣рдгреЗ рдЖрдгрд┐ рд╕рдВрджреЗрд╢ рд╢реЛрдзрдгреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рддреНрд░реБрдЯреА рдирд╛рд╡рд╛рдиреЗ.

рдЖрдордЪреНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░реНрд╕рд╡рд░ рдНрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рд╕рдХреНрд╖рдо рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рд░реАрдЯреНрд░рд┐рдЕрд░ рдРрдХрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдНрдХреНрд╕реЗрд╕рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рд░реАрдЯреНрд░рд┐рдпрд░рд▓рд╛ DESTINATION рд╡рд┐рд╖рдпрд╛рд╡рд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ, рдордзреНрдпрд╛рдВрддрд░ рд╡рд┐рд╖рдпрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, рддреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкреВрд░реНрдг рд╡рд╛рдв рдЭрд╛рд▓реЗрд▓рд╛ DLQ рдЖрдгрд┐ UI рдЖрд╣реЗ.

рдЕрд╢реА рдкреНрд░рдХрд░рдгреЗ рдЖрд╣реЗрдд рдЬреЗрд╡реНрд╣рд╛ рдпреЗрдгрд╛рд░реЗ рд╡рд┐рд╖рдп рдЕрдиреЗрдХ рднрд┐рдиреНрди рдЧреНрд░рд╛рд╣рдХ рдЧрдЯрд╛рдВрджреНрд╡рд╛рд░реЗ рд╡рд╛рдЪрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреНрдпрд╛рдВрдЪреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рднрд┐рдиреНрди рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд░рддрд╛рдд. рдпрд╛рдкреИрдХреА рдПрдХрд╛ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА Retryer рджреНрд╡рд╛рд░реЗ рдореЗрд╕реЗрдЬрдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реНрдпрд╛рд╕ рджреБрд╕рд▒реНрдпрд╛рд╡рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛрдИрд▓. рдпрд╛рдкрд╛рд╕реВрди рд╕рдВрд░рдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рд╕реНрд╡рддрдВрддреНрд░ рд╡рд┐рд╖рдп рддрдпрд╛рд░ рдХрд░рддреЛ. рдпреЗрдгрд╛рд░реЗ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгрд╛рд░реЗ рд╡рд┐рд╖рдп рд╕рдорд╛рди рдЧреНрд░рд╛рд╣рдХ рдХреЛрдгрддреНрдпрд╛рд╣реА рдирд┐рд░реНрдмрдВрдзрд╛рдВрд╢рд┐рд╡рд╛рдп рд╡рд╛рдЪреВ рд╢рдХрддрд╛рдд.

рдХрд╛рдлреНрдХрд╛рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдирд╛рдВрдЪреА рдкреБрдирд░реНрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ

рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдд рдирд╛рд╣реА, рддрдерд╛рдкрд┐ рддреЗ рд╡рд╛рдкрд░реВрди рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдХрд┐рдВрд╡рд╛ рдирд╡реАрди рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░, рдЬреНрдпрд╛ рдард┐рдХрд╛рдгреА рдмрд╛рд╣реНрдп рд╕реЗрд╡рд╛рдВрдирд╛ рдпреЛрдЧреНрдп рдЕтАНреЕрдмрд╕реНрдЯреНрд░реЕрдХреНрд╢рдирдордзреНрдпреЗ рдмреЛрд▓рд╛рд╡рд▓реЗ рдЬрд╛рддреЗ рддреНрдпрд╛ рдард┐рдХрд╛рдгреА рдЧреБрдВрдбрд╛рд│рдгреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпрд╛рд╕рд╛рдареА рдПрдХ рдзреЛрд░рдг рдирд┐рд╡рдбрдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ рдмрд▓реНрдХрд╣реЗрдб рдирдореБрдирд╛, рдЬреЗ рдЙрдкрдпреБрдХреНрдд рджреЗрдЦреАрд▓ рдЕрд╕реВ рд╢рдХрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕рдордзреНрдпреЗ рд╣реЗ рдереНрд░реЗрдб рдкреВрд▓ рдХрд┐рдВрд╡рд╛ рд╕реЗрдорд╛рдлреЛрд░ рдЕрд╕реВ рд╢рдХрддреЗ.

рдирд┐рд╖реНрдХрд░реНрд╖

рдкрд░рд┐рдгрд╛рдореА, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗ рдЬреЛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдиреНрд╣рд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ рдЬрд░ рдХреЛрдгрддреАрд╣реА рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реА рддрд╛рддреНрдкреБрд░рддреА рдЕрдиреБрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓.

рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪрд╛ рдПрдХ рдореБрдЦреНрдп рдлрд╛рдпрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рддреЗ рдПрдХрд╛рдЪ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реАрдВрджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛ рд▓рдХреНрд╖рдгреАрдп рдмрджрд▓ рди рдХрд░рддрд╛! рдЕрд╢рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рдлрдХреНрдд рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрд╛рд╣реА рдХрд╛рдлреНрдХрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рднрд░рд╛ рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгрд╛рд░реНтАНрдпрд╛рд▓рд╛ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рд╛. рдХреЛрдгрддреНрдпрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЙрднрд╛рд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА. рдЖрдгрд┐ ре▓рдкреНрд▓рд┐рдХреЗрд╢рдирдордзреВрди Retryer рдЖрдгрд┐ рдмреЕрдХрдХрдбреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрджреЗрд╢рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд░реЗрдЦреАрдп рддрд░реНрдХрд╛рд╕рд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдУрд│рдЦрд▓реЗ рдЖрдгрд┐ рдЧреНрд░рд╛рд╣рдХ рд╕реНрдЯреЙрдкрджреНрд╡рд╛рд░реЗ рддреНрдпрд╛рдВрдЪреА рдкреБрдиреНрд╣рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛