๐Ÿ’ป/์ธํ”„๋ผ

[RabbitMQ] RabbitMQ?

ruhz 2021. 7. 1. 18:14

๋ฏธ๋“ค์›จ์–ด

๋ฏธ๋“ค์›จ์–ด๋Š” ์–‘ ์ชฝ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์—์„œ ๋งค๊ฐœ ์—ญํ• ์„ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋“ค์—๊ฒŒ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งํ•œ๋‹ค. 3๊ณ„์ธต ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„ ๊ตฌ์กฐ์—์„œ ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ์ค‘๊ฐ„์— ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message-oriented middleware, MOM)๋Š” ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด์ด๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์— ๊ธฐ์ดˆํ•œ ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋งŽ์€ ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋Š” ๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€๋งŒ, ๊ทธ ๋ฐ–์—๋„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ํ˜•์‹ ๋ฉ”์‹œ์ง€ ์‹œ์Šคํ…œ๊ณผ ๋ฉ€ํ‹ฐ ์บ์ŠคํŠธ ํ˜•์‹์˜ ๋ฉ”์‹œ์ง€ ์‹œ์Šคํ…œ์ ์ธ ๋‚ด์šฉ๋„ ์žˆ๋‹ค. ์žฅ์ ์œผ๋กœ๋Š” ์ €์žฅ(๋ฏธ๋“ค์›จ์–ด์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐฑ์—…), ๋ผ์šฐํŒ…(๋ฏธ๋“ค์›จ์–ด์—์„œ ๋ฐฐํฌ ๊ฐ€๋Šฅ), ๋ณ€ํ™˜(์†ก/์ˆ˜์‹ ์ž์— ๋งž์ถฐ ํ˜•์‹ ๋ณ€ํ™˜ ๊ฐ€๋Šฅ) ๋‹จ์ ์œผ๋กœ๋Š” ๋ฉ”์„ธ์ง€ ์ „์†ก ์—์ด์ „ํŠธ ํ•„์š”, ํ‘œ์ค€์ด๋ผ๊ณ  ๋ถ€๋ฅผ ๊ทœ๊ฒฉ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ

 

 

๋ฉ”์‹œ์ง€ ํ ์‹œ์Šคํ…œ

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ, ๋ฉ”์‹œ์ง€ ๊ณต๊ธ‰์ž ์œ„์น˜์— ์ผ์ข…์˜ ๋ฒ„ํผ(Queue)๋ฅผ ๋‘”๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋ฐœ์ƒํ•ด ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค. ๋ฏธ๋“ค์›จ์–ด์— ๋ฉ”์‹œ์ง€๋ฅผ ์œ„์ž„ํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ‘œ์ค€์ด ์—†์–ด ๊ตฌํ˜„ํ•˜๋Š” ์‚ฌ๋žŒ๋งˆ๋‹ค ์‚ฌ์šฉ๋ฒ•์ด๋‚˜ ๊ตฌํ˜„๋ฐฉ์‹์ด ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค. 

 

 

AMQP

AMQP(Advanced Message Queueing Protocol)๋Š” ๋ฉ”์„ธ์ง€ ํ์˜ ํ‘œ์ค€์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค. ๋งŽ์€ ๋ธ”๋กœ๊ทธ์—์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฌ๊ฒŒ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด ํ‘œ์ค€์€ AMQP(ํ”„๋กœํ† ์ฝœ)๊ณผ AMQM(๋ชจ๋ธ ์„ค๊ณ„ ๋ฐฉ์‹)์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. 

AMQP์˜ ํ”„๋กœํ† ์ฝœ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต, ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์—์„œ ์ •์˜๋œ๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ด์•ผ๊ธฐํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„, ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๋ฌด์‚ฌํžˆ ์ง€๋‚˜๊ฐ€ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„ ์ •์˜ํ•œ๋‹ค.

AMQP๋Š” ๋ฏธ๋“ค์›จ์–ด์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๋™์ž‘์— ๋Œ€ํ•ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์ƒํ˜ธ ์šด์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ •๋„๋กœ๊นŒ์ง€ ๊ถŒํ•œ์„ ์ฃผ๋ฉฐ, SMTP, HTTP, FTP ๋“ฑ๋„ ์ƒํ˜ธ ์šด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (API + ๋ฉ”์‹œ์ง€ ์†ก์‹ ์ž๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ํ–‰์œ„)๋ฅผ ์ •์˜ํ•˜๋Š” JMS์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, AMQP๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ •์˜ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋”ฐ๋ฅด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ผ๋ฉด ๊ตฌํ˜„ ์–ธ์–ด์— ๊ด€๊ณ„ ์—†์ด ๋‹ค๋ฅธ ํ˜ธํ™˜ ๋„๊ตฌ์™€ ์ƒํ˜ธ ์šด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

AMQM

์ด๊ฒƒ์ด AMQP์˜ ๋ชจ๋ธ์ด๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” RabbitMQ์˜ ๋ชจ๋ธ์„ ๋ณด๋ฉฐ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

 

 

RabbitMQ ๋™์ž‘

AMQP๋ฅผ ๋”ฐ๋ฅด๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ด๋‹ค.  ์•„๋ž˜ ๋งํฌ ์„ค๋ช…์ด ์ข‹์œผ๋‹ˆ ์ฒจ๋ถ€ํ•œ๋‹ค.

 

RabbitMQ๋ž€?

์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ API-Gateway์— ํ† ํฐ ์บ์‹œ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด RabbitMQ๋ฅผ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

blog.dudaji.com

 

 

RabbitMQ ํŠœํ† ๋ฆฌ์–ผ

0. Docker ์„ค์น˜(์„ค์น˜ ๋งํฌ)

์„ค์น˜ ์ค‘ WSL์„ ์—…๋ฐ์ดํŠธ ํ•˜๋ผ๋Š” ์ฐฝ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋งํฌ๋ฅผ ์ซ“์•„๊ฐ€ ์„ค์น˜ํ•˜๊ณ  Restart ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

1. RabbitMQ ์„ค์น˜(์ฐธ๊ณ  ๋งํฌ)

docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

 

2. ๊ฐ์ž ์‚ฌ์šฉํ•  ์–ธ์–ด์— ๋งž๊ฒŒ ์ถ”๊ฐ€ ์„ค์น˜

๋ณธ์ธ์€ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉ(Pycharm, Anaconda, pika ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜)

 

3. ํŠœํ† ๋ฆฌ์–ผ ๋”ฐ๋ผํ•˜๊ธฐ

๋ฒˆ์—ญ๋ณธ(๋งํฌ)

 

RabbitMQ Tutorials — RabbitMQ

RabbitMQ Tutorials These tutorials cover the basics of creating messaging applications using RabbitMQ. You need to have the RabbitMQ server installed to go through the tutorials, please see the installation guide or use the Docker image. Executable version

www.rabbitmq.com

 

4. ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒƒ๋“ค

  • Vhost(virutal host)
    • Virtual Host๋ฅผ ํ†ตํ•ด์„œ ํ•˜๋‚˜์˜ RabbitMQ ์ธ์Šคํ„ด์Šค ์•ˆ์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” Application์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Connection
    • ๋ฌผ๋ฆฌ์ ์ธ TCP Connection, HTTPS -> TLS(SSL) Connection์„ ์‚ฌ์šฉ
  • Channel
    • ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์ ์ธ Connection ๋‚ด์— ์ƒ์„ฑ๋˜๋Š” ๊ฐ€์ƒ์˜ Connection
    • Consumer์˜ process๋‚˜ thread๋Š” ๊ฐ์ž Channel์„ ํ†ตํ•ด Queue์— ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

RPC๋ž€?

์™œ RPC๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ? ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํŒจํ„ด์€? Client - Server ํŒจํ„ด Client๋Š” ์š”์ฒญํ•˜

nesoy.github.io

 

 

์ฐธ๊ณ ๋งํฌ:

์œ„ํ‚ค๋ฐฑ๊ณผ 'AMQP' : https://ko.wikipedia.org/wiki/AMQP

CloudAMQP 'What is AMQP and why is it used in RabbitMQ?' : https://www.cloudamqp.com/blog/what-is-amqp-and-why-is-it-used-in-rabbitmq.html

CloudAMQP 'Microservices - why use RabbitMQ?' : https://www.cloudamqp.com/blog/why-use-rabbitmq-in-a-microservice-architecture.html

ํ‹ฐ์Šคํ† ๋ฆฌ 'RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ' ; https://kamang-it.tistory.com/entry/AMQPRabbitMQRabbitMQ%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EC%99%80-%EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95-1

ํ‹ฐ์Šคํ† ๋ฆฌ 'RabbitMQ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…': https://ram2ram2.tistory.com/3

'RabbitMQ ๊ณ„์ • ์„ค์ •' : http://abh0518.net/tok/?p=384 

 

[Rabbitmq] 1. ์ดˆ๋ณด๋ฅผ ์œ„ํ•œ RabbitMQ ํ›„๋”ฑ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•˜๊ธฐ | ์•„๋ธŒ์˜ ๊ฟ€์˜ค๋ถ„

ํšŒ์‚ฌ์˜ ์บ์‹œ์นด์šฐ ์„œ๋น„์Šค์˜ ํ‘ธ์‹œ ํŒŒํŠธ๋ฅผ ๊ฐœ์„ ํ•ด์•ผํ•  ์ผ์ด ์ƒ๊ฒผ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด oldํ•œ๊ฒŒ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ธ๋ฐ ๊ทธ ์ค‘ ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์€ push message queue๋ฅผ RDBMS๋กœ ๊ตฌํ˜„ํ•ด ๋†“์€ ๋ถ€๋ถ„์ด๋‹ค. DB ํŠœ๋‹ ํ• ๋•Œ

abh0518.net

http://gjchoi.github.io/rabbit/rabbit-mq-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

 

RabbitMQ - ์ดํ•ดํ•˜๊ธฐ

Rabbit MQ๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ค ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณธ๋‹ค.

gjchoi.github.io

https://blog.ashon.dev/blog/2018/10/14/rabbitmq-message-mirroring-using-shovel.html

 

RabbitMQ shovel ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•œ ๋ฉ”์‹œ์ง€ ๋ฏธ๋Ÿฌ๋ง

RabbitMQ shovel plugin์„ ํ™œ์šฉํ•ด์„œ Queue๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฉ”์‹œ์ง€๋“ค์„ ๋‹ค๋ฅธ Queue๋กœ ๋ฏธ๋Ÿฌ๋ง์„ ๊ตฌ์„ฑํ•ด ์‹ค ์„œ๋น„์Šค์—์„œ ํ˜๋Ÿฌ๊ฐ€๋Š” ๋ฉ”์‹œ์ง€๋“ค์„ ํŠธ๋ ˆ์ด์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.

blog.ashon.dev

https://m.blog.naver.com/tmondev/221051503100

 

RabbitMQ๋กœ ๋ฉ”์‹œ์ง€ ์†์‹ค ์ตœ์†Œํ™” ํ•˜๋Š” ๋ฒ•(1)

์šฐ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœ์ƒํ•œ ํ›„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์˜ ๋„์ž…์ด ํ•„์š”ํ–ˆ๋‹ค. ๋ฌผ๋ก  ์ €์žฅ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง...

blog.naver.com

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zltmwnffldpt&logNo=220914409334 

 

rabbitmq ha ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์„ฑ๋Šฅ ๊ด€๋ จ ๋‚ด์šฉ์ •๋ฆฌ

ํด๋Ÿฌ์Šคํ„ฐ๋ง ๊ด€๋ จ - rabbitMQ broker ๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ, ์ƒํƒœ๊ฐ€ ๋ชจ๋‘ ๋ณต์ œ ์ถ”๊ฐ€์„ค๋ช…: ํด๋Ÿฌ์Šคํ„ฐ๋ง์œผ...

blog.naver.com