From 32519f4ae8ba63e3fbf0689b1113ef230b2c1444 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Thu, 22 May 2008 21:31:04 +0000 Subject: [PATCH] Updating Reference Documentation for M4. --- .../images/message-bus.png | Bin 0 -> 46014 bytes spring-integration-reference/src/core-api.xml | 89 +++++++++++++++--- spring-integration-reference/src/overview.xml | 5 + 3 files changed, 80 insertions(+), 14 deletions(-) create mode 100644 spring-integration-reference/images/message-bus.png diff --git a/spring-integration-reference/images/message-bus.png b/spring-integration-reference/images/message-bus.png new file mode 100644 index 0000000000000000000000000000000000000000..40186c2cd2ed76436aac2c853cd6420cb2997baa GIT binary patch literal 46014 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%0AC(D+uk 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 H>c9DaEPyRs literal 0 HcmV?d00001 diff --git a/spring-integration-reference/src/core-api.xml b/spring-integration-reference/src/core-api.xml index 30b6b1fabf..379c879c69 100644 --- a/spring-integration-reference/src/core-api.xml +++ b/spring-integration-reference/src/core-api.xml @@ -164,22 +164,83 @@ target.send(new StringMessage("test")); When sending a message, the return value will be true if the message is sent successfully. If the send call times out or is interrupted, then it will return false. Likewise when receiving a message, the return value will be null in the case of a timeout or interrupt. - The QueueChannel implementation wraps a queue. It provides a no-argument constructor as - well as a constructor that accepts the queue capacity: - public QueueChannel(int capacity) - Specifying a capacity of 0 will create a "direct-handoff" channel where a sender will block until the channel's - receive() method is called. Otherwise a channel that has not reached its capacity limit - will store messages in its internal queue, and the send() method will return immediately - even if no receiver is ready to handle the message. - Whereas the QueueChannel enforces first-in/first-out (FIFO) ordering, the - PriorityChannel is an alternative implementation that allows for messages to be ordered - within the channel based upon a priority. By default the priority is determined by the - 'priority' property within each message's header. However, for custom priority determination - logic, a comparator of type Comparator<Message<?>> can be provided to the - PriorityChannel's constructor. + Spring Integration provides several different implementations of the + MessageChannel interface. Each is briefly described in the sections below. +
+ QueueChannel + + The QueueChannel implementation wraps a queue. It provides a no-argument constructor + (that uses a default capacity of 100) as well as a constructor that accepts the queue capacity: + public QueueChannel(int capacity) + A channel that has not reached its capacity limit will store messages in its internal queue, and the + send() method will return immediately even if no receiver is ready to handle the + message. If the queue has reached capacity, then the sender will block until room is available. Likewise, a + receive call will return immediately if a message is available on the queue, but if the queue is empty, then + a receive call may block until either a message is available or the timeout elapses. In either case, it is + possible to force an immediate return regardless of the queue's state by passing a timeout value of 0. + Note however, that calling the no-arg versions of send() and + receive() will block indefinitely. + +
+
+ PriorityChannel + + Whereas the QueueChannel enforces first-in/first-out (FIFO) ordering, the + PriorityChannel is an alternative implementation that allows for messages to be ordered + within the channel based upon a priority. By default the priority is determined by the + 'priority' property within each message's header. However, for custom priority determination + logic, a comparator of type Comparator<Message<?>> can be provided to the + PriorityChannel's constructor. + +
+
+ RendezvousChannel + + The RendezvousChannel enables a "direct-handoff" scenario where a sender will block + until another party invokes the channel's receive() method or vice-versa. Internally, + this implementation is quite similar to the QueueChannel except that it uses a + SynchronousQueue (a zero-capacity implementation of + BlockingQueue). This works well in situations where the sender and receiver are + operating in different threads but simply dropping the message in a queue asynchronously is too dangerous. For + example, the sender's thread could roll back a transaction if the send operation times out, whereas with a + QueueChannel, the message would have been stored to the internal queue and potentially + never received. + + + The RendezvousChannel is also useful for implementing request-reply + operations. The sender can create a temporary, anonymous instance of RendezvousChannel + which it then sets as the 'returnAddress' on a Message. After sending that Message, the sender can immediately + call receive (optionally providing a timeout value) in order to block while waiting for a reply Message. + +
+
+ DirectChannel + + The DirectChannel is significantly different than the channel implementations described + thus far. It's primary purpose is to enable a single thread to perform the operations on "both sides" of the + channel. For example, if a HandlerEndpoint is subscribed to a + DirectChannel, then sending a Message to that channel will trigger invocation of the + handler directly in the sender's thread. The key motivation for providing a channel + implementation with this behavior is to support transactions. If the send call is invoked within the scope of a + transaction, then the outcome of the handler invocation can play a role in determining the ultimate result of + that transaction (commit or rollback). + +
+
+ ThreadLocalChannel + + The final channel implementation type is ThreadLocalChannel. This channel also delegates + to a queue internally, but the queue is bound to the current thread. That way the thread that sends to the + channel will later be able to receive those same Messages, but no other thread would be able to access them. + While probably the least common type of channel, this is useful for situations where + DirectChannels are being used to enforce a single thread of operation but any reply + Messages should be sent to a "terminal" channel. If that terminal channel is a + ThreadLocalChannel, the original sending thread could collect its replies. + +
@@ -455,7 +516,7 @@ public void registerHandler(String name, MessageHandler handler, Rather than programming to the API directly, it is simpler and more common to register sources, targets, and handlers with either XML or annotation-based metadata. Then, the message endpoint is an internal responsibility - of the bus. The configuration options are discussed in detail in . + of the bus. The configuration options are discussed in detail in .
diff --git a/spring-integration-reference/src/overview.xml b/spring-integration-reference/src/overview.xml index 266e2346ee..6771027bd1 100644 --- a/spring-integration-reference/src/overview.xml +++ b/spring-integration-reference/src/overview.xml @@ -262,6 +262,11 @@ and Message Endpoint components from within the application context. It handles the scheduling of pollers, the creation of thread pools, and the lifecycle management of all messaging components that can be initialized, started, and stopped. The Message Bus is the primary example of inversion of control within Spring Integration. + + + + +