Exchange
- ๊ตํ๊ธฐ ๋๋ ๊ตํ ์ง์ . ๋ฉ์์ง๊ฐ ์ ์ก๋ฉ๋๋ค. Exchange
๋ฉ์์ง๋ฅผ ๋ฐฐํฌํฉ๋๋ค ํ๋ ์ด์์ ๋๊ธฐ์ด์ ์์ต๋๋ค. ๊ทธ ๋ฉ์์ง๋ฅผ ํ๋ก ๋ผ์ฐํ
์์ฑ๋ ์ฐ๊ฒฐ์ ๊ธฐ๋ฐ์ผ๋ก(bindings
) ๊ทธ์ ๋๊ธฐ์ด ์ฌ์ด.
Exchange
~์ด ์๋๋ค. exchange
- ๋ด์ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ผ์ธ(๋ผ์ฐํ
๋ก์ง์ด ์๋ ์ฝ๋๊ฐ ์๋ ๋ชจ๋์ ๋ํ ๋งํฌ)์
๋๋ค.
์ฐจ๋ก
RabbitMQ. ํํธ 1. ์๊ฐ. Erlang, AMQP ๋ฐ RPC RabbitMQ. 2๋ถ. ๊ตํ ์ดํดํ๊ธฐ - RabbitMQ. 3๋ถ. ๋๊ธฐ์ด ๋ฐ ๋ฐ์ธ๋ฉ ์ดํด
- RabbitMQ. ํํธ 4. ๋ฉ์์ง ๋ฐ ํ๋ ์ ์ฒ๋ฆฌ
- RabbitMQ. 5๋ถ: ๋ฉ์์ง ๊ฒ์ ๋ฐ ์ฌ์ฉ ์ฑ๋ฅ
- RabbitMQ. ํํธ 6. Federation ๋ฐ Shovel ๋ชจ๋ ๊ฐ์
- RabbitMQ. Part 7. ์ฐ๊ฒฐ ๋ฐ ์ค๋ฌ์ ๋ํ ์ธ๋ถ ์ ๋ณด
- RabbitMQ. ํํธ 8. .NET์ RabbitMQ
- RabbitMQ. ํํธ 9. ๋ชจ๋ํฐ๋ง
์ง์ ๊ตํ
Direct exchange
- ํ์ํ ๋ ์ฌ์ฉ ํน์ ๋๊ธฐ์ด์ ๋ฉ์์ง ์ ๋ฌ. ๋ฉ์์ง๋ ํน์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๊ตํ๊ธฐ์ ๊ฒ์๋ฉ๋๋ค. ๋ผ์ฐํ
ํค ์ ์ฌํ ๋ผ์ฐํ
ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๊ตํ๊ธฐ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋๊ธฐ์ด์ ๋ค์ด๊ฐ๋๋ค. ๋ผ์ฐํ
ํค๋ ๋ฌธ์์ด์
๋๋ค.. ๋ค์์ ์ฌ์ฉํ์ฌ ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ์ต๋๋ค. ๋ฌธ์์ด์ด ๋์ผํ์ง ํ์ธ.
๋ฉ์์ง ํ๋ฆ์ ๊ทธ๋ํฝ ํํ:
ะ rabbitmq
๊ฐ๋
์ด ์๋ค ๊ธฐ๋ณธ ๊ตํ๊ธฐ. ๊ทธ๊ฒ direct exchange
์ด๋ฆ์ด ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ตํ๊ธฐ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ํ๋ก ๋ผ์ฐํ
๋ฉ๋๋ค. ๋ฉ์์ง ๋ผ์ฐํ
ํค.
์ฃผ์ ๊ตํ
Topic exchange
- ๋น์ทํ direct exchange
๋ผ์ฐํ
ํค๋ฅผ ๋น๊ตํ์ฌ ์ ํ์ ๋ผ์ฐํ
์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ์ด ๊ฒฝ์ฐ์๋ ํค๊ฐ ์ ๊ณต๋ฉ๋๋ค. ํ
ํ๋ฆฟ์ผ๋ก. ํ
ํ๋ฆฟ์ ๋ง๋ค ๋ ๋ค์์ ์ฌ์ฉํ์ธ์. 0
๋๋ ๋ ๋ง์ ๋จ์ด(๋ฌธ์ AZ
ะธ az
๊ทธ๋ฆฌ๊ณ ์ซ์ 0-9
), ์ ์ผ๋ก ๊ตฌ๋ถ ๋ฐ ๊ธฐํธ *
ะธ #
.
*
- ์ ํํ๊ฒ ๋์ฒด๋ ์ ์์1
ัะปะพะฒะพ#
- ๋ค์์ผ๋ก ๋์ฒด ๊ฐ๋ฅ0
๋๋ ๋ ๋ง์ ๋จ์ด
๋ฉ์์ง ํ๋ฆ์ ๊ทธ๋ํฝ ํํ:
๋ฒ์ ์ดํ RabbitMQ 2.4.0
๋ผ์ฐํ
์๊ณ ๋ฆฌ์ฆ topic exchange
๊น์ง ์ผ์ ์์ํ๋ค 145
๋ฐฐ ๋ ๋นจ๋ผ์. ๊ทธ๋ค์ ์ ๊ทผ ๋ฐฉ์์ ๋์
ํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ์ต๋๋ค. a.b.c
, a.*.b.c
, a.#.c
ะธ b.b.c
๋ค์ ๊ตฌ์กฐ๋ก ํํ๋ฉ๋๋ค.
ํจํด ์ผ์น ๊ฒ์์ ๋ฃจํธ๋ถํฐ ์์ํ์ฌ ์์์ ์๋๋ก ์งํ๋ฉ๋๋ค.
ํน์ง :
- ์ด ๊ตํ๊ธฐ์ ์ฌ์ฉ์ ๋ ์ ์์ต๋๋ค ํฅํ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ ์ข์ ์ ํ, ์๋ํ๋ฉด ๋ฉ์์ง๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ฒ์๋๋๋ก ํ
ํ๋ฆฟ์ ํญ์ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
direct exchange
๋๋fanout exchange
- ์ฌ์ฉํ๋ ํ
ํ๋ฆฟ
*
ํจ์ฌ ๋ ๋นจ๋ฆฌ์ฌ์ฉํ๋ ํ ํ๋ฆฟ๋ณด๋ค#
. topic exchange
๋๋ฆฐdirect exchange
ํฌ์์ ๊ตํ
Fanout exchange
- ๋ชจ๋ ๋ฉ์์ง๊ฐ ๋ชจ๋ ๋๊ธฐ์ด๋ก ์ ๋ฌ๋ฉ๋๋ค. ๋ฉ์์ง์ ๋ผ์ฐํ
ํค๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
ํน์ง :
RabbitMQ
๋ผ์ฐํ ํค ๋ฐ ํ ํ๋ฆฟ์์๋ ์๋ํ์ง ์์ต๋๋ค. ์ด๋ ์์ฐ์ฑ์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด๊ฒ์ด ๊ฐ์ฅ ๋น ๋ฅด๋คexchange
;- ๋ชจ๋ ์๋น์๋ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด์ผ ํฉ๋๋ค.
๋ฉ์์ง ํ๋ฆ์ ๊ทธ๋ํฝ ํํ:
ํค๋ ๊ตํ
Headers exchange
- (ํค, ๊ฐ) ์์ฑ ์์ ๋น๊ต๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฐ๊ฒฐ๋ ๋๊ธฐ์ด๋ก ๋ผ์ฐํ
ํฉ๋๋ค. headers
๋ฐ์ธ๋ฉ ๋ฐ ์ ์ฌํ ๋ฉ์์ง ์์ฑ. headers
~์ด๋ค. Dictionary<ะบะปัั, ะทะฝะฐัะตะฝะธะต>
.
์ฌ์ ์ ํน์ ํค๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ x-match
์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ any
, (ํค, ๊ฐ) ์์ด ๋ถ๋ถ์ ์ผ๋ก ์ผ์นํ๋ ๊ฒฝ์ฐ ๋ฉ์์ง๊ฐ ๋ผ์ฐํ
๋ฉ๋๋ค. ์ด ๋์์ ์ฐ์ฐ์์ ์ ์ฌํฉ๋๋ค. or
.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
๊ธฐ๋ณธ ํค x-match
๊ฐ์ ํฌํจํฉ๋๋ค all
. ์ด๋ (ํค, ๊ฐ) ์์ด ์ ํํ ์ผ์นํ๋ฉด ๋ฉ์์ง๊ฐ ๋ผ์ฐํ
๋๋ค๋ ์๋ฏธ์
๋๋ค. ์ด ๋์์ ์ฐ์ฐ์์ ์ ์ฌํฉ๋๋ค. and
.
๋ฉ์์ง ํ๋ฆ์ ๊ทธ๋ํฝ ํํ:
ํน์ง :
- ์ถ๊ฐ์ ์ธ ์ ์ฐ์ฑ
- ์ถ๊ฐ ๊ณ์ฐ ์ค๋ฒํค๋. ์์ฑ์ ๋ชจ๋ (ํค, ๊ฐ) ์
headers
๋ฉ์์ง ๋ผ์ฐํ ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ ์ ํค ์ด๋ฆ๋ณ๋ก ์ ๋ ฌํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ๊ตํ ์ ํ๋ณด๋ค ๋๋ฆผ.
์ผ๊ด๋ ํด์ฑ ๊ตํ
์ด ๊ตํ๊ธฐ๋ RabbitMQ
.
Consistent-hashing exchange
(์ผ๊ด๋ ํด์ฑ์ผ๋ก ๊ตํ) - ์ ์ฌ์ ์ธ ๋ฉ์์ง ์์ ์๊ฐ ๋ ๋๊ธฐ์ด์ด ์ฌ๋ฌ ๊ฐ ์์ ๋์ ์ด๋ค ์ฌ์ด์ ๋ก๋ ๊ท ํ์ ์กฐ์ ํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ํ์ ๋ฉ์์ง์ ์ฐ๊ฒฐ์ ๊ฐ์ค์น(์กฐ๊ฑด๋ถ ๋ฌธ์์ด ๊ฐ)์ ๋ฐ๋ผ ๋ฐ์ํฉ๋๋ค. 0 - n
).
๋๊ธฐ์ด์ ๋ฑ๊ฐ ๊ฐ์ค์น - ๊ฐ ๋๊ธฐ์ด์ด ์์ ํจ์ ๋ํ๋ ๋๋ค. ๊ฑฐ์ ๊ฐ์ ๊ธ์ก ๋ฉ์์ง(๊ฐ ๋ฉ์์ง๋ ํ๋์ ๋๊ธฐ์ด์๋ง ๋ฐฐ์น๋ฉ๋๋ค) ๋ฉ์์ง์ ๊ท ์ผํ ๋ฐฐํฌ๊ฐ ์๋ฒฝํ๊ฒ ๋ณด์ฅ๋์ง๋ ์์ต๋๋ค..
๋ฉ์์ง ํ๋ฆ์ ๊ทธ๋ํฝ ํํ:
Hash
๋ผ์ฐํ
ํค ๋๋ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ๋จ headers
๋ฉ์์ง. ๊ฒ์๋ ๋ชจ๋ ๋ฉ์์ง์ ์๋ก ๋ค๋ฅธ ๋ผ์ฐํ
ํค๊ฐ ์๋ ๊ฒฝ์ฐ ๋๋ headers
, ๊ทธ๋ฌ๋ฉด ๋ถํฌ๋ ๋ฌด๊ฒ๋ณ๋ก ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ผ์ฐํ
ํค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. headers
.
๋จ์ผ ๋๊ธฐ์ด์ ์ฌ์ฉํ๋ ์ฌ๋ฌ ์๋น์๊ฐ ์๋ ์๋ฃจ์ ๋ณด๋ค ์๋น์ ์ฒ๋ฆฌ๋์ ๋์ฌ์ผ ํ ๋ ๋์์ด ๋ฉ๋๋ค.
๊ตํ๊ธฐ ๊ฒฐํฉ(E2E)
ํต์ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ตํ๊ธฐ์ ๋์์ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ๊ตํ ๋ ๊ตํ (๊ตํ๊ธฐ ๊ฒฐํฉ์ ์ฌ์์ ํฌํจ๋์ง ์์ต๋๋ค. AMQP
. ์ด๊ฒ์ ์ธก๋ฉด์์ ํ๋กํ ์ฝ์ ํ์ฅํ ๊ฒ์
๋๋ค. RabbitMQ
).
๋ฉ์์ง ํ๋ฆ์ ๊ทธ๋ํฝ ํํ:
์์ฑ์ E2E
ํ์ฌ ์๊ตฌ ์ฌํญ๊ณผ ์ฆ๊ฐํ๋ ์๊ตฌ ์ฌํญ์ ๋ชจ๋ ์ถฉ์กฑํ ์ ์๋ ์ฌ๋ฐ๋ฅธ ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์ฑ์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ตํ ์์ฑ
๊ตํ๊ธฐ ์์ฑ์ ๋๊ธฐ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ํฉ๋๋ค. RPC
์๋ฒ์ ์์ฒญํฉ๋๋ค. ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์์ฒญ์ด ์ด๋ฃจ์ด์ง๋๋ค. Exchange.Declare
, ๋ค์ ๋งค๊ฐ๋ณ์์ ํจ๊ป ํธ์ถ๋จ:
- ๊ตํ๊ธฐ ์ด๋ฆ
- ๊ตํ๊ธฐ ์ ํ
- ๋ค๋ฅธ ์ต์
์์ฑ์ exchange
...์ ์ํ์ฌ
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...
exchange
โ ์์ฑํ๋ ค๋ ๊ตํ๊ธฐ์ ์ด๋ฆ์ ๋๋ค. ์ด๋ฆ์ ๊ณ ์ ํด์ผ ํฉ๋๋ค.type
โ ๊ตํ๊ธฐ ์ ํdurable
- ์ค์น๋ ๊ฒฝ์ฐtrue
, ๊ทธ๋ฐ ๋ค์exchange
์๊ตฌ์ ์ด ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋์คํฌ์ ์ ์ฅ๋๋ฉฐ ์๋ฒ/๋ธ๋ก์ปค๋ฅผ ๋ค์ ์์ํด๋ ์ ์ง๋ ์ ์์ต๋๋ค. ๊ฐ์ดfalse
, ๊ทธ๋ฐ ๋ค์exchange
์์์ ์ด๋ฉฐ ์๋ฒ/๋ธ๋ก์ปค๊ฐ ์ฌ๋ถํ ๋๋ฉด ์ญ์ ๋ฉ๋๋ค.autoDelete
- ์๋ ์ ๊ฑฐ.Exchange
๊ด๋ จ๋ ๋ชจ๋ ๋๊ธฐ์ด์ด ์ญ์ ๋๋ฉด ์ญ์ ๋ฉ๋๋ค.arguments
- ์ ํ์ ์ธ์. ๋๋ถ๋ถ ์ธ์๋ฅผ ํตํด ์ง์ ํฉ๋๋ค.alternative exchange
(๋์ฒด ๊ตํ๊ธฐ). ๋ฉ์์ง๊ฐ ์๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ ๋์ฒด ๊ตํ๊ธฐ๋ก ์ ์ก๋์ด ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ผ์ฐํ ๋ ์ ์์ต๋๋ค.
์์ฑํ๋ ๊ฒฝ์ฐ exchange
์ด์ฉ๋ฉด๊ทธ๋ฐ ๋ค์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ๋๊ธฐ์์ ๋ณด๋
๋๋ค. RPC
๋ต๋ณ Exchange.DeclareOk
. ์์ฑํ๋ ๊ฒฝ์ฐ ๋ถ๊ฐ๋ฅํ (์์ฒญ์ ๋ํ ๊ฑฐ๋ถ๊ฐ ์์์ต๋๋ค. Exchange.Declare
), ์ ๊ฒ ์ฑ๋์ด ๋ซํ๋๋ค ๋น๋๊ธฐ ๋ช
๋ น์ ์ฌ์ฉํ๋ ์๋ฒ Channel.Close
๊ทธ๋ฆฌ๊ณ ํด๋ผ์ด์ธํธ๋ ์์ธ๋ฅผ ์ป์ ๊ฒ์
๋๋ค
๋ฉ์์ง๋ฅผ ๊ฒ์ํ๊ธฐ ์ ์ ๊ตํ๊ธฐ๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์กด์ฌํ์ง ์๋ ๊ตํ๊ธฐ์ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ - RabbitMQ
์กฐ์ฉํ ์ ๊ฑฐํ๊ฒ ์ต๋๋ค.
GUI๋ฅผ ํตํด Exchange ์์ฑ
๊ด๋ฆฌ์ ํจ๋๋ก ์ด๋ RabbitMQ
์ฌ์ฉ์ ์๋ guest
(์ฌ์ฉ์ ์ด๋ฆ: guest
๋ฐ ์ํธ: guest
). ์ฌ์ฉ์๋ guest
localhost์์๋ง ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ด์ ํญ์ผ๋ก ์ด๋ํฉ๋๋ค. Exchanges
๊ทธ๋ฆฌ๊ณ ํด๋ฆญ Add a new exchange
. ์์ฑ์ ์
๋ ฅํฉ๋๋ค.
๋๋ถ๋ถ์ ์์ฑ์ ์์ ์ค๋ช
๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ค์ ํ๋ฉด Internal
, ๊ตํ์ ๋ค์ ์ฉ๋๋ก๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. E2E
. Producer
๊ทธ๋ฌํ ๊ตํ์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์์คํ
์ ๊ฐ๋ฐํ ๋ ํ ํด๋ก์ง๋ฅผ ์ค๋ช
ํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
๊ตฌ์ฑ๋ ๊ทธ๋ํ์ ์ ํ ์งํฉ ๋ผ์ฐํ
ํค๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. fanout exchange
, ๋ผ์ฐํ
ํค์ 1:1๋ก ๊ด๋ จ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค fanout exchange
๊ฐ์ฅ ๋น ๋ฅธ.
๋
ธ์ ์์ ๊ฒฝ์ฐ ๋ฌดํ๋๋ก ๊ฐ๋ ๊ฒฝํฅ์ด ์๋ค, ๊ทธ๋ ๋ค๋ฉด ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค. topic exchange
๋๋ ํ
ํ๋ฆฟ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ ์ ํํ ์ ์์ต๋๋ค. direct exchnge
, ์๋ํ๋ฉด ๊ทธ ์ฌ๋์ด ๋ ๋น ๋ฅด๋ค topic exchange
.
๋ค์ํ ์กฐํฉ exchange
๋น์ ์ด ์ฌ๋ฐ๋ฅธ ๊ฒ์ ์ฐพ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค ํ์ฅ ๊ฐ๋ฅํ ๊ตฌ์ฑ, ์ด๋ ํ์ฌ ๋ฐ ์ฆ๊ฐํ๋ ์์คํ
์๊ตฌ ์ฌํญ์ ๋ชจ๋ ์ถฉ์กฑํฉ๋๋ค.
์ exchange
๊ทธ๋ฆฌ๊ณ ๊ฒฝ๋ก ์์ ๋นํด ๋๊ธฐ์ด์ด ์ต์ํ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ๊ธ์์๋ ํ์ ๋ฐ์ธ๋ฉ์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐธ์กฐ
์ถ์ฒ : habr.com