Message Endpoints

Message Transformer

๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜๊ธฐ๋Š” ๋ฉ”์‹œ์ง€์˜ ๋‚ด์šฉ์ด๋‚˜ ๊ตฌ์กฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ  ์ˆ˜์ •๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

Message Filter

๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ ์ฑ„๋„๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ๋Š” ์—ฌ๋Ÿฌ ์†Œ๋น„์ž๊ฐ€ ๋™์ผํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ํ•„ํ„ฐ ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ๋ฉ”์‹œ์ง€ ์ง‘ํ•ฉ์˜ ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์žˆ๋Š” publish-subscribe channel๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

Message Router

๋ฉ”์‹œ์ง€ ๋ผ์šฐํ„ฐ๋Š” ๋‹ค์Œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•ด์•ผ ํ•˜๋Š” ์ฑ„๋„(์žˆ๋Š” ๊ฒฝ์šฐ)์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ ๋˜๋Š” ๋ฉ”์‹œ์ง€ ํ—ค๋”์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ๋ผ์šฐํ„ฐ๋Š” ํšŒ์‹  ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ์•กํ‹ฐ๋ฒ ์ดํ„ฐ ๋˜๋Š” ๊ธฐํƒ€ ์—”๋“œํฌ์ธํŠธ์—์„œ ์ •์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ถœ๋ ฅ ์ฑ„๋„์— ๋Œ€ํ•œ ๋™์  ๋Œ€์•ˆ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Message Router

Splitter

์Šคํ”Œ๋ฆฌํ„ฐ๋Š” ์ž…๋ ฅ ์ฑ„๋„์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋กœ ๋ถ„ํ• ํ•˜๊ณ  ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ ์ฑ„๋„๋กœ ๋ณด๋‚ด๋Š” ๋˜ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ฉ”์‹œ์ง€ ๋์ ์ž…๋‹ˆ๋‹ค

Aggregator

์• ๊ทธ๋ฆฌ๊ฒŒ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ๋‹จ์ผ ๋ฉ”์‹œ์ง€๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ์ผ์ข…์˜ ๋ฉ”์‹œ์ง€ ์—”๋“œํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค.

Service Activator

Service Activator๋Š” ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜ ๋์ ์ž…๋‹ˆ๋‹ค.

Service Activator

๋ฉ”์‹œ์ง€ ์ฑ„๋„์—์„œ ์ฑ„๋„์€ ํด๋ง ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๊ตฌ๋… ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์ด๊ฒƒ์€ "์‹œ๊ณ„" ๊ธฐํ˜ธ์™€ ์‹ค์„  ํ™”์‚ดํ‘œ(poll) ๋ฐ ์ ์„  ํ™”์‚ดํ‘œ(subscribe)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

Channel Adapter

์ฑ„๋„ ์–ด๋Œ‘ํ„ฐ๋Š” ๋ฉ”์‹œ์ง€ ์ฑ„๋„์„ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด๋‚˜ ์ „์†ก์— ์—ฐ๊ฒฐํ•˜๋Š” ๋์ ์ž…๋‹ˆ๋‹ค.

์ธ๋ฐ”์šด๋“œ ์ฑ„๋„ ์–ด๋Œ‘ํ„ฐ ์—”๋“œํฌ์ธํŠธ๋Š” ์†Œ์Šค ์‹œ์Šคํ…œ์„ MessageChannel์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์†Œ์Šค๋Š” pollable(์˜ˆ: POP3) ๋˜๋Š” message-driven(์˜ˆ: IMAP Idle) ํ•  ์ˆ˜์žˆ๋‹ˆ๋‹ค. ์•ž์˜ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์ด๋Š” "์‹œ๊ณ„" ๊ธฐํ˜ธ์™€ ์‹ค์„  ํ™”์‚ดํ‘œ(poll) ๋ฐ ์ ์„  ํ™”์‚ดํ‘œ(message-driven)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

์•„์›ƒ๋ฐ”์šด๋“œ ์ฑ„๋„ ์–ด๋Œ‘ํ„ฐ ๋์ ์€ MessageChannel์„ ๋Œ€์ƒ ์‹œ์Šคํ…œ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์‹œ์ง€ ์ฑ„๋„์—์„œ ์ฑ„๋„์€ ํด๋ง ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๊ตฌ๋… ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ์ด๊ฒƒ์€ "์‹œ๊ณ„" ๊ธฐํ˜ธ์™€ ์‹ค์„  ํ™”์‚ดํ‘œ(poll) ๋ฐ ์ ์„  ํ™”์‚ดํ‘œ(subscribe)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค

Endpoint Bean Names

์†Œ๋น„ ์—”๋“œํฌ์ธํŠธ(inputChannel์ด ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ)๋Š” consumer์™€ message ํ•ธ๋“ค๋Ÿฌ๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋นˆ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Consumer๋Š” ๋ฉ”์‹œ์ง€ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์ด๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค

XML ๊ตฌ์„ฑ:

์•ž์˜ ์˜ˆ์—์„œ bean ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  • Consumer: someService (the id)

  • Handler: someService.handler

EIP(Enterprise Integration Pattern) ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฆ„์€ ์—ฌ๋Ÿฌ ์š”์ธ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‹ฌ๋ฆฐ POJO์˜ ๋‹ค์Œ ์˜ˆ:

์•ž์˜ ์˜ˆ์—์„œ bean ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค

  • Consumer: someComponent.someMethod.serviceActivator

  • Handler: someComponent.someMethod.serviceActivator.handler

๋ฒ„์ „ 5.0.4๋ถ€ํ„ฐ ๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด @EndpointId์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์˜ ์˜ˆ์—์„œ bean ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Consumer: someService

  • Handler: someService.handler

@EndpointId๋Š” XML ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ id ์†์„ฑ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ด๋ฆ„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์•ž์˜ ์˜ˆ์—์„œ bean ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Consumer: someConfiguration.someHandler.serviceActivator

  • Handler: someHandler (the @Bean name)

๋ฒ„์ „ 5.0.4๋ถ€ํ„ฐ ๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด @EndpointId ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์˜ ์˜ˆ์—์„œ bean ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Consumer: someService (the endpoint ID)

  • Handler: someService.handler (the bean name)

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ง ๊ฐ€๋Šฅ ๋ฉ”์‹œ์ง€ ์†Œ์Šค๋Š” SPCA(SourcePollingChannelAdapter)์™€ MessageSource๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋นˆ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

XML ๊ตฌ์„ฑ:

Given the preceding XML configuration, the bean names are as follows:

  • SPCA: someAdapter (the id)

  • Handler: someAdapter.source

Java configuration of a POJO to define an @EndpointId

Given the preceding Java configuration example, the bean names are as follows:

  • SPCA: someAdapter

  • Handler: someAdapter.source

Java configuration of a bean to define an @EndpointID:

Given the preceding example, the bean names are as follows:

  • SPCA: someAdapter

  • Handler: someAdapter.source (as long as you use the convention of appending .source to the @Bean name)

Reference

Last updated

Was this helpful?