Channel adapters are for one-way integration (gateways are bidirectional).
Concretely, inbound adapters are at the beginning of a flow, outbound adapters terminate a flow. Flows are typically rendered (and conceptually thought of as flowing from left to right)...
inbound-c-a->someComponent->someOtherComponent->outbound-ca
(where ->
represents a channel).
There are two types of inbound channel adapters:
MessageProducer
s
MessageSource
s
MessageProducer
s are termed "message-driven" i.e. they unilaterally produce messages in a completely asynchronous manner, as soon as they are started; examples are JMS message-driven adapter, TCP inbound channel adapter, IMAP Idle (mail) channel adapter, etc.
MessageSource
s on the other hand are polled - a poller
with some trigger causes the framework to ask the source for a message; the trigger can be on a fixed rate, cron expression etc. Examples are the (S)FTP adapters, Mail inbound adapter (POP3. IMAP).
Examples of outbound adapters are Mail outbound adapter (SMTP).
Gateways are two-way (request/reply).
Inbound gateways are where some external system sends a request and Spring Integration replies.
Outbound gateways are where Spring Integration makes the request and some external system replies.
I hope that clears things up.