ํ ๋ฒ์ ์ถฉ๋ถํ ๋ฉ์์ง(์: 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)
}
}
์ต๋ช
ํจ์๊ฐ for ๋ฌธ์์ d
์ด์์ผ๋ก ๋ซํ๋๋ค. func์ ๋ฒ์์์ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ์ง์ ํ์ญ์์ค.
๋ํ ๋ค์๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์ฑ๋ ์ค๋ฅ๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
go func() {
log.Fatal(<-channel.NotifyClose(make(chan *amqp.Error)))
}()
@MattParker89 ๋ RabbitMQ ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ์ธ์. ์ฑ๋ ์์ธ๊ฐ ํฌํจ๋ฉ๋๋ค. ๋น์ ์ ๊ฑฐ์ ํ์คํ๊ฒ ์ด์ค์ผ๋ก ๋ฐฐ๋ฌ์ ํ๊ณ ์์ต๋๋ค.
๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. @michaelklishin ์ ๋ ์ด์ค
์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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 ์ ๋ ์ด์ค
์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.