Message Channels
The MessageChannel Interface
public interface MessageChannel {
boolean send(Message message);
boolean send(Message message, long timeout);
}λ©μμ§λ₯Ό λ³΄λΌ λ λ©μμ§κ° μ±κ³΅μ μΌλ‘ μ μ‘λλ©΄ λ°ν κ°μ trueμ λλ€. 보λ΄κΈ° νΈμΆμ΄ μκ° μ΄κ³Όλκ±°λ μ€λ¨λλ©΄ falseλ₯Ό λ°νν©λλ€.
PollableChannel
λ©μμ§ μ±λμ λ©μμ§λ₯Ό λ²νΌλ§νκ±°λ λ²νΌλ§νμ§ μμ μ μμΌλ―λ‘ λ κ°μ νμ μΈν°νμ΄μ€κ° λ²νΌλ§(ν΄λ§ κ°λ₯) λ° λΉλ²νΌλ§(ꡬλ κ°λ₯) μ±λ λμμ μ μν©λλ€
public interface PollableChannel extends MessageChannel {
Message<?> receive();
Message<?> receive(long timeout);
}SubscribableChannel
SubscribableChannel κΈ°λ³Έ μΈν°νμ΄μ€λ ꡬλ λ MessageHandler μΈμ€ν΄μ€μ λ©μμ§λ₯Ό μ§μ 보λ΄λ μ±λμ μν΄ κ΅¬νλ©λλ€. λ°λΌμ ν΄λ§μ μν μμ λ°©λ²μ μ 곡νμ§ μμ΅λλ€. λμ μ΄λ¬ν ꡬλ μλ₯Ό κ΄λ¦¬νλ λ°©λ²μ μ μν©λλ€.
Message Channel Implementations
PublishSubscribeChannel
PublishSubscribeChannel ꡬνμ μ μ‘λ λͺ¨λ λ©μμ§λ₯Ό ꡬλ ν λͺ¨λ νΈλ€λ¬λ‘ λΈλ‘λμΊμ€νΈν©λλ€.
QueueChannel
QueueChannel ꡬνμ queueλ‘ λνν©λλ€. PublishSubscribeChannelκ³Ό λ¬λ¦¬ QueueChannelμλ point-to-point semanticsκ° μμ΅λλ€. μ¦, μ±λμ μ¬λ¬ μλΉμκ° μλλΌλ κ·Έ μ€ νλλ§ ν΄λΉ μ±λλ‘ μ μ‘λ λ©μμ§λ₯Ό μμ ν΄μΌ ν©λλ€.
μΈμκ° μλ κΈ°λ³Έ μμ±μ(λ³Έμ§μ μΌλ‘ μ νλμ§ μμ Integer.MAX_VALUE μ©λ μ 곡)μ λ€μ λͺ©λ‘κ³Ό κ°μ΄ λκΈ°μ΄ μ©λμ νμ©νλ μμ±μλ₯Ό μ 곡ν©λλ€.
PriorityChannel
QueueChannelμ μ μ μ μΆ(FIFO) μμλ₯Ό μ μ©νλ λ°λ©΄, PriorityChannelμ μ°μ μμμ λ°λΌ μ±λ λ΄μμ λ©μμ§λ₯Ό μ λ ¬ν μ μλ λ체 ꡬνμ λλ€
κΈ°λ³Έμ μΌλ‘ μ°μ μμλ κ° λ©μμ§ λ΄μ μ°μ μμ ν€λμ μν΄ κ²°μ λ©λλ€.
RendezvousChannel
RendezvousChannelμ λ€λ₯Έ λΉμ¬μκ° μ±λμ receive() λ©μλλ₯Ό νΈμΆν λκΉμ§ λ°μ μκ° μ°¨λ¨νλ "μ§μ νΈλμ€ν" μλ리μ€λ₯Ό κ°λ₯νκ² ν©λλ€
DirectChannel
DirectChannelμλ μ§μ κ° μλ―Έ 체κ³κ° μμ§λ§ κ·Έ μΈμλ μμμ μ€λͺ ν λκΈ°μ΄ κΈ°λ° μ±λ ꡬνλ³΄λ€ PublishSubscribeChannelκ³Ό λ μ μ¬ν©λλ€
PollableChannel μΈν°νμ΄μ€ λμ SubscribableChannel μΈν°νμ΄μ€λ₯Ό ꡬννλ―λ‘ λ©μμ§λ₯Ό ꡬλ μμκ² μ§μ λ°μ‘ν©λλ€. κ·Έλ¬λ μ λμ μ±λλ‘μ κ° λ©μμ§λ₯Ό λ¨μΌ κ°μ MessageHandlerλ‘ λ³΄λΈλ€λ μ μμ PublishSubscribeChannelκ³Ό λ€λ¦ λλ€.
ExecutorChannel
ExecutorChannelμ DirectChannelκ³Ό λμΌν λμ€ν¨μ² ꡬμ±(λΆν κ· ν μ λ΅ λ° μ₯μ μ‘°μΉ λΆμΈ μμ±)μ μ§μνλ μ§μ κ° μ±λμ λλ€.
μ΄ λ λμ€ν¨μΉ μ±λ μ νμ μ£Όμ μ°¨μ΄μ μ ExecutorChannelμ΄ λμ€ν¨μΉλ₯Ό ββμννκΈ° μν΄ TaskExecutorμ μΈμ€ν΄μ€μ μμνλ€λ κ²μ λλ€.
μ¦, send λ©μλλ μΌλ°μ μΌλ‘ μ°¨λ¨νμ§ μμ§λ§ λ³΄λΈ μ¬λμ μ€λ λμμ μ²λ¦¬κΈ° νΈμΆμ΄ λ°μνμ§ μμ μλ μμμ μλ―Έν©λλ€.
PartitionedChannel
λ²μ 6.1λΆν° PartitionedChannel ꡬνμ΄ μ 곡λ©λλ€. μ΄κ²μ AbstractExecutorChannelμ νμ₯μ΄λ©° μ΄ μ±λλ‘ μ μ‘λ λ©μμ§μμ νκ°λ νν°μ
ν€μ μν΄ κ²°μ λλ νΉμ μ€λ λμμ μ€μ μλΉκ° μ²λ¦¬λλ μ§μ κ° λμ€ν¨μΉ λ
Όλ¦¬λ₯Ό λνλ
λλ€.
μ΄ μ±λμ μμμ μΈκΈν ExecutorChannelκ³Ό λΉμ·νμ§λ§ νν°μ ν€κ° κ°μ λ©μμ§λ νμ μμλ₯Ό μ μ§νλ©΄μ λμΌν μ€λ λμμ μ²λ¦¬λλ€λ μ°¨μ΄μ μ΄ μμ΅λλ€.
μΈλΆ TaskExecutorκ° νμνμ§ μμ§λ§ μ¬μ©μ μ§μ ThreadFactoryλ‘ κ΅¬μ±ν μ μμ΅λλ€.
μ΄ ν©ν 리λ λ¨μΌ μ€λ λ μ€νκΈ°λ₯Ό νν°μ
λ³λ‘ MessageDispatcher λ리μλ‘ μ±μ°λ λ° μ¬μ©λ©λλ€. κΈ°λ³Έμ μΌλ‘ IntegrationMessageHeaderAccessor.CORRELATION_ID λ©μμ§ ν€λκ° νν°μ
ν€λ‘ μ¬μ©λ©λλ€.
FluxMessageChannel
FluxMessageChannelμ λ³΄λΈ λ©μμ§λ₯Ό λ΄λΆ react.core.publisher.Fluxλ‘ "μ±ν¬"νκΈ° μν org.reactivestreams.Publisher ꡬνμ
λλ€.
Channel Interceptors
λ©μμ§ μν€ν μ²μ μ₯μ μ€ νλλ μΌλ°μ μΈ λμμ μ 곡νκ³ μμ€ν μ ν΅κ³Όνλ λ©μμ§μ λν μλ―Έ μλ μ 보λ₯Ό λΉμΉ¨ν¬μ μΈ λ°©μμΌλ‘ μΊ‘μ²νλ κΈ°λ₯μ λλ€.
Message μΈμ€ν΄μ€λ MessageChannel μΈμ€ν΄μ€μμ μ‘μμ λλ―λ‘ μ΄λ¬ν μ±λμ μ‘μμ μμ μ κ°λ‘μ± μ μλ κΈ°νλ₯Ό μ 곡ν©λλ€.
μΈν°νμ΄μ€λ₯Ό ꡬνν ν μΈν°μ ν°λ₯Ό μ±λμ λ±λ‘νλ κ²μ λ€μ νΈμΆμ μννκΈ°λ§ νλ©΄ λ©λλ€.
MessagingTemplate
Spring Integrationμ μμ² λ° μλ΅ μλ리μ€λ₯Ό ν¬ν¨νμ¬ λ©μμ§ μ±λμμ λ€μν μμ μ μ§μνλ MessagingTemplateμ μ 곡ν©λλ€.
Example
Signatures
Special Channels
ErrorChannel
NullChannel
Reference
Last updated