RabbitMQ์ Channel
com.rabbitmq.client.Channel ํด๋์ค๋ RabbitMQ Java Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํต์ฌ ํด๋์ค์ด๋ค.
์ด ํด๋์ค๋ AMQP(Advanced Message Queuing Protocol) ์ฑ๋์ ๋ํ๋ด๋ฉฐ, RabbitMQ๋ ๋ฉ์์ง ํ ์์คํ ์ผ๋ก, Channel์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ RabbitMQ ์๋ฒ ๊ฐ์ ํต์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ค์ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ <--> RabbitMQ์ ๋๋ถ๋ถ์ ์ํธ์์ฉ์ด ์ฑ๋์ ํตํด ์ด๋ฃจ์ด์ง๋ค.
Channel์ ์ฃผ์ ๊ธฐ๋ฅ
1. ๋ฉ์์ง ๋ฐํ(publishing)
void basicPublish(
String exchange,
String routingKey,
AMQP.BasicProperties props,
byte[] body)Channel์ ์ฌ์ฉํด์ ๋ฉ์์ง๋ฅผ ํ์ ์ ์กํ ์ ์๋ค. ์ด๋ ํน์ exchange์ routing key๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํํ๋ค.
2. ๋ฉ์์ง ์๋น(consuming)
String basicConsume(
String queue,
boolean autoAck,
Consumer callback)์ง์ ๋ ํ์์ ๋ฉ์์ง๋ฅผ ์๋นํ๋ค. autoAck๊ฐ true๋ฉด ์๋์ผ๋ก ๋ฉ์์ง ์์ ์ ํ์ธํ๊ณ , ์๋น์ ํ๊ทธ(cosumer tage)๋ฅผ ๋ฐํํ๋ค. ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์์ง๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์๋นํ ์ ์๋ค.
3. ๋ฉ์์ง ํ์ธ(acknowledgements) ๐
๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ํ ์๋ต์ ๋ณด๋ด๋ 3๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
a. basicAck()
ํน์ ๋ฉ์์ง์ ์์ ์ ํ์ธํ๋ค.
deliveryTag: ํ์ธ(ACK)ํ ๋ฉ์์ง์ ๊ณ ์ ํ๊ทธ
multiple:
true โ ํ์ฌ
deliveryTag๊น์ง ์๋น์๊ฐ ๋ฐ์ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ํ๊บผ๋ฒ์ ACK ์ฒ๋ฆฌfalse โ ํด๋น
deliveryTag๋ฉ์์ง๋ง ACK ์ฒ๋ฆฌ
b. basicNack()
๋ฉ์์ง์ ์์ ์ ๊ฑฐ๋ถํ๋ฉฐ, ๋ฆฌํ์ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
deliveryTag: ๋ฉ์์ง ๊ณ ์ ์ ํ๊ทธ (์ซ์ 1, 2..)
multiple:
true: ํ์ฌ
deliveryTag๊น์ง ์๋น์๊ฐ ๋ฐ์ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ํ๊บผ๋ฒ์ Nackํ๋ ๊ฒfalse:
ํ์ฌ ๋ฉ์์ง๋งack ์ฒ๋ฆฌ
requeue
true: ๋ฉ์์ง๋ฅผ ๋ค์ ํ์ ๋ฃ์ (์ฌ์๋ ๊ฐ๋ฅ)
false: ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆฌ๊ฑฐ๋
DLX๋ก ๋ณด๋
c. basicReject()
basicNack๊ณผ ์ ์ฌํ์ง๋ง ๋จ์ผ ๋ฉ์์ง์ ์์ ์ ๊ฑฐ๋ถํ๋ค.
deliveryTag: ๋ฉ์์ง ๊ณ ์ ์ ํ๊ทธ
requeue:
true: ๋ค์ queue์ ๋ฃ์
false: ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆฌ๊ฑฐ๋ DLX๋ก ๋ณด๋
4. ํ ๊ด๋ฆฌ(queue management)
a. Qeueu ์ ์ธ
ํ๋ฅผ ์ ์ธํ๋ ๋ฉ์๋์ด๋ค. ๋ง์ฝ ํ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ฑํ๋ค.
ํ์ ์ด๋ฆ(name), ์ง์์ฑ(durable), ๋ ์ ์ (exclusive), ์๋ ์ญ์ (autoDelete) ์ฌ๋ถ์ ๊ฐ์ ์์ฑ์ ์ค์ ํ ์ ์๋ค.
AMQP.Queue.DeclareOk์ ๊ฐ์ ํด๋์ค๋ RabbitMQ Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์์ AMQP ํ๋กํ ์ฝ์ ๊ท๊ฒฉ์ ๋ฐ๋ฅด๋ ํด๋์ค๋ค ์ค ํ๋์ด๋ค.
arguments์๋ ํ์ ์์ฑ์ ์ง์ ํ ์ ์๋ค. ๋ง์ฝ ํ์ ttl์ ์ค์ ํ๋ฉด ๋ฉ์์ง์ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ ์ ์๋ค.
b. Queue ์ญ์
์ง์ ํ ์ด๋ฆ์ ํ๋ฅผ ์ญ์ ํ๋ค.
5. ์ต์ค์ฒด์ธ์ง ๊ด๋ฆฌ(exchange mangement)
exchange๋ ๋ฉ์์ง์ ๋ผ์ฐํ ์ ๋ด๋นํ๋ ์ญํ ์ ํ๋ฉฐ, ํ์ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ๋ฉ์์ง๋ฅผ ํ์ ์ ๋ฌํ๋ค.
exchange์ ์ด๋ฆ
type: direct, fanout, topic, headers ๋ฑ
durable: ์๋ฒ ์ฌ์์ ์์๋ ์ต์ค์ฒด์ธ์ง๊ฐ ์ ์ง๋ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์
6. ๋ฐ์ธ๋ฉ ๊ด๋ฆฌ(binding management)
queueBind๋ ํ์ ์ต์ค์ฒด์ธ์ง๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋ฐ์ธ๋ฉ์ด ์ด๋ฃจ์ด์ ธ์ผ ๋ฉ์์ง๊ฐ ์ต์ค์ฒด์ธ์ง์์ ํ๋ก ๋ผ์ฐํ ๋ ์ ์๊ฒ ๋๋ค.
queue: ๋ฐ์ธ๋ฉํ ํ์ ์ด๋ฆ.
exchange: ํ๋ฅผ ๋ฐ์ธ๋ฉํ ์ต์ค์ฒด์ธ์ง์ ์ด๋ฆ.
routingKey: ๋ผ์ฐํ ํค (ํนํ
direct,topic์ต์ค์ฒด์ธ์ง ํ์ ์์ ์ฌ์ฉ).fanoutํ์ ์ ์ต์ค์ฒด์ธ์ง์์๋ ์ด ๊ฐ์ ๋ฌด์ํ๋ค.
์ค์ ์ ํตํด ํ์ ์ต์ค์ฒด์ธ์ง๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ผ์ฐํ ๊ท์น์ ๋ง๋ ๋ฉ์์ง๊ฐ ํด๋น ํ๋ก ์ ๋ฌ๋๋๋ก ํ๋ค.
7. ํ๋ฆ ์ ์ด(flow control)
์ด๋ RabbitMQ์ QoS(Quality of Service) ์ค์ ์ ์ํ ๋ฉ์๋๋ก, ๋ฉ์์ง๋ฅผ ์๋นํ๋ ํด๋ผ์ด์ธํธ๊ฐ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฉ์์ง ์๋ฅผ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ฆ, consumer๊ฐ ํ ๋ฒ์ ๋ฐ์ ์ ์๋ ๋ฉ์์ง ์๋ฅผ ์ ํํ๋ค.
์ด๋ฅผ ํตํด์ ์์คํ ์ด ๊ณผ๋ถํ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ๋ฉ์์ง ์ฒ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
prefetchCount: ํ ๋ฒ์ ์๋นํ ์ ์๋ ์ต๋ ๋ฉ์์ง ์๋ฅผ ์ง์ ํ๋ค. 'chunk'๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ด ๊ฐ์ ์ค์ ํ๋ฉด RabbitMQ ์๋ฒ์์๋ ํด๋น ์ ๋งํผ์ ๋ฉ์์ง๋ฅผ ํ ๋ฒ์ ์ปจ์๋จธ์๊ฒ ์ ๋ฌํ๊ณ , ์ปจ์๋จธ๊ฐ ์๋ต์ ๋ณด๋ด๊ธฐ ์ ๊น์ง๋ ์ถ๊ฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ์ง ์๋๋ค.
์ฌ์ฉ ์์
์์ ์ Spring AMQP์์๋ ์ ์์ค API๋ฅผ ๊ฐ์ธ๊ณ ์์ง๋ง, @RabbitListenr์ ackMode = "MANUAL" ์ค์ ์ Channel ๊ฐ์ฒด๋ฅผ ์ง์ ๋ค๋ฃฐ ํ์๊ฐ ์๋ค.
๋ค์์ Spring AMQP์์ Channel ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์์ ์ด๋ค.
Channel ํด๋์ค๋ RabbitMQ์์ ํต์ ์ ์ํ ํต์ฌ ์ธํฐํ์ด์ค์ด๋ฉฐ, ๋ฉ์์ง์ ๋ฐํ, ์๋น, ํ์ธ ๋ฐ ํ ๊ด๋ฆฌ์ ๊ฐ์ ๋ชจ๋ ์ค์ํ ์์ ์ ์ํํ ์ ์๋ค.
Last updated