рдЕрдЧрд░ рдореИрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрднреЛрдХреНрддрд╛ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 10,000), рддреЛ рдЪреИрдирд▓ рдХреЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдм рдирдИ рдбрд┐рд▓реАрд╡рд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдореИрдВ d.Ack рдХреЛ рд╣рдЯрд╛ рджреВрдВ рдФрд░ рд╕рд┐рд░реНрдл рдбрд┐рд▓реАрд╡рд░реА рдХреА рдмреЙрдбреА рдкреНрд░рд┐рдВрдЯ рдХрд░ рд▓реВрдВ, рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред
func main() {
conn, _ := amqp.Dial(*uri)
channel, _ := conn.Channel()
deliveries, _ := channel.Consume(
*queue, //queue
"",
false,
false,
false,
false,
nil)
for d := range deliveries {
go func(amqp.Delivery) {
log.Printf("got %s", d.Body)
d.Ack(false)
}(d)
}
}
рдЖрдкрдХрд╛ рдЕрдирд╛рдо func for рдХрдерди рд╕реЗ d
рд╕реЗ рдЕрдзрд┐рдХ рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИред рдкрд░рдо рдХреЛ рдЕрдкрдиреЗ func рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╛рдо рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рд╕рд╛рде рд╣реА рдЖрдк рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЪреИрдирд▓ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
go func() {
log.Fatal(<-channel.NotifyClose(make(chan *amqp.Error)))
}()
@ MattParker89 RabbitMQ рд▓реЙрдЧ рджреЗрдЦреЗрдВ, рдЗрд╕рдореЗрдВ рдПрдХ рдЪреИрдирд▓ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛ред рдЖрдк рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбрдмрд▓-рдПрдХрд┐рдВрдЧ рдбрд┐рд▓реАрд╡рд░реА рд╣реИрдВред
рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред @michaelklishin рдореИрдВ рдбрдмрд▓-рдПрдХрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреЛрдбрд╝рдХрд░ рдФрд░ рдЧреЛ рд░реВрдЯреАрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╣реА рдЧрд▓рддреА рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдорд┐рд▓реА рддреНрд░реБрдЯрд┐ рдЕрдкрд╡рд╛рдж (406) рдХрд╛рд░рдг рдереА: "PRECONDITION_FAILED - рдЕрдЬреНрдЮрд╛рдд рдбрд┐рд▓реАрд╡рд░реА рдЯреИрдЧ 24782"
рдпрд╣рд╛рдБ рдХрд╛рд░реНрдп рдХреЛрдб рд╣реИ
func main() {
conn, _ := amqp.Dial(*uri)
channel, _ := conn.Channel()
deliveries, _ := channel.Consume(
*queue, //queue
"",
false,
false,
false,
false,
nil)
for d := range deliveries {
go doSomeWork(d)
}
}
func doSomeWork(d amqp.Delivery){
log.Printf("got %s", d.Body)
d.Ack(false)
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред @michaelklishin рдореИрдВ рдбрдмрд▓-рдПрдХрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддреЛрдбрд╝рдХрд░ рдФрд░ рдЧреЛ рд░реВрдЯреАрди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡рд╣реА рдЧрд▓рддреА рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдорд┐рд▓реА рддреНрд░реБрдЯрд┐ рдЕрдкрд╡рд╛рдж (406) рдХрд╛рд░рдг рдереА: "PRECONDITION_FAILED - рдЕрдЬреНрдЮрд╛рдд рдбрд┐рд▓реАрд╡рд░реА рдЯреИрдЧ 24782"
рдпрд╣рд╛рдБ рдХрд╛рд░реНрдп рдХреЛрдб рд╣реИ