Sobes.tech
Middle — Middle+

Կարող եք բացատրել հաղորդագրությունների հիերարխիան՝ առաքման երաշխիքով, որտեղ հաղորդագրությունը երաշխավորված է առնվազն մեկ անգամ հասցնել:

sobes.tech AI

Պատասխան AI-ից

Նվազագույն մեկ անգամ առաքման երաշխավորությունը (at-least-once delivery) նշանակում է, որ համակարգը ապահովում է հաղորդագրության առաքումը առնվազն մեկ անգամ, բայց կարող է լինել կրկնօրինակում:

Նման երաշխավորությամբ հաղորդագրությունների հիերարխիան սովորաբար կառուցվում է հետևյալ մակարդակներում:

  1. Հաղորդագրության ուղարկում — հաղորդագրությունը դրվում է հերթ կամ հաղորդագրության բրոքեր:
  2. Ստացման հաստատում — ստացողը հաստատում է հաղորդագրության ստացումը (acknowledgment):
  3. Կրկնակի ուղարկում — եթե հաստատումը չի ստացվում նշված ժամանակահատվածում, հաղորդագրությունը կրկին ուղարկվում է:

Go-ում, օրինակ, Kafka կամ RabbitMQ բրոքերների հետ աշխատելիս, այս տրամաբանությունը կարող է իրականացվել.

  • Հաղորդագրությունը հրապարակվում է հերթում:
  • Ստացողը մշակում է հաղորդագրությունը և ուղարկում հաստատում:
  • Եթե հաստատումը չի ստացվում, բրոքերը կրկին հասցնում է հաղորդագրությունը:

Այսպիսով, դա ապահովում է, որ հաղորդագրությունը առնվազն մեկ անգամ կհասնի, բայց կարող է հասցվել մի քանի անգամ, եթե հաստատումը կորցվի կամ մշակումը չի ավարտվի:

Go-ում RabbitMQ-ի օրինակ (պարզեցված):

ch, _ := conn.Channel()
msgs, _ := ch.Consume("queue", "", false, false, false, false, nil)

for d := range msgs {
    // Հաղորդագրության մշակումը
    processMessage(d.Body)
    // Մշակման հաստատում
    d.Ack(false)
}

Եթե Ack չի կանչվում, հաղորդագրությունը կրկին կհասնի։