From 6325e425880337761789b5ad96ec2e3d0c920f23 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Sat, 5 Feb 2011 19:41:28 -0500 Subject: [PATCH] clarified the documentation about providing a message-store for a QueueChannel --- docs/src/reference/docbook/channel.xml | 61 +++++++++++--------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/docs/src/reference/docbook/channel.xml b/docs/src/reference/docbook/channel.xml index cc0a36e1db..7dfdedfffe 100644 --- a/docs/src/reference/docbook/channel.xml +++ b/docs/src/reference/docbook/channel.xml @@ -438,58 +438,47 @@ public Message receive(final PollableChannel channel) { ... }]]>Persistent QueueChannel Configuration - Since QueueChannel provides capability to buffer Messages it also introduces a point of failure - where Messages could be lost in the event of the system crash. To mitigate this risk, QueueChannel is - backed by a persistent store which is exposed via simple strategy interface MessageStore: - getMessage(UUID id); - - Message addMessage(Message message); - - Message removeMessage(UUID id); - - int getMessageCount(); -}]]> - For more details on MessageStore see . + Since a QueueChannel provides the capability to buffer Messages, but does so in-memory only + by default, it also introduces a possibility that Messages could be lost in the event of a system failure. To + mitigate this risk, a QueueChannel may be backed by a persistent implementation of the + MessageGroupStore strategy interface. For more details on MessageGroupStore + and MessageStore see . - When QueueChannel receives the Message it will add the Message to the MessageStore - by invoking addMessage(Message) method and when the Message is polled from the MessageStore - it is removed from it via removeMessage(UUID) method. + When a QueueChannel receives a Message, it will add it to the Message Store, and when a Message + is polled from a QueueChannel, it is removed from the Message Store. - By default any QueueChannel is bootstrapped with SimpleMessageStore which is - in-memory Map-based implementation of the MessageStore interface. However Spring Integration - also provides JdbcMessageStore to allow QueueChannel to be backed by an RDBMS. + By default any QueueChannel only stores its Messages in an in-memory Queue + and can therefore lead to the lost message scenario mentioned above. However Spring Integration + provides a JdbcMessageStore to allow a QueueChannel to be backed by an RDBMS. - You configure MessageStore for QueueChannel via message-store attribute. + You can configure a Message Store for any QueueChannel by adding the + message-store attribute as shown in the next example. - - + + - - -]]> +]]> - You can also see that you can configure JdbcMessageStore via namespace support provided by - Spring Integration JDBC module. All you need to do is inject any standard Spring datasource. Spring Integration JDBC - module also provides schemas for most popular databases. These schemas are located in - org.springframework.integration.jdbc package of Spring Integration JDBC module. + The above example also shows that JdbcMessageStore can be configured with the namespace support + provided by the Spring Integration JDBC module. All you need to do is inject any javax.sql.DataSource + instance. The Spring Integration JDBC module also provides schema DDL for most popular databases. These schemas are located in + the org.springframework.integration.jdbc package of that module (spring-integration-jdbc). - One thing to remember is that with any transactional persistent store (e.g., JdbcMessageStore) - the messages removed from such persistent store will only be completely removed if transaction completed - successfully, otherwise transaction will roll back and the Message will not be lost. + One thing to remember is that with any transactional persistent store (e.g., JdbcMessageStore), + a Message removed from the store will only be permanently removed if the transaction completes + successfully, otherwise the transaction will roll back and the Message will not be lost. - And of course you can alway provide your own implementation of MessageStore interface + Many other implementations of the Message Store will be available as the growing number of Spring projects + related to "NoSQL" data stores provide the underlying support. Of course, you can always provide your own implementation + of the MessageGroupStore interface if you cannot find one that meets your particular needs. - -
PublishSubscribeChannel Configuration