diff --git a/docs/src/reference/docbook/amqp.xml b/docs/src/reference/docbook/amqp.xml new file mode 100644 index 0000000000..ec7a58dac8 --- /dev/null +++ b/docs/src/reference/docbook/amqp.xml @@ -0,0 +1,476 @@ + + + AMQP Support + +
+ Introduction + + + Spring Integration provides Channel Adapters for receiving and sending + messages using the Advanced Message Queuing Protocol (AMQP). + + The following adapters are available: + + Inbound Channel Adapter + Outbound Channel Adapter + Inbound Gateway + Outbound Gateway + + + + In order to provide AMQP support, Spring Integration relies on Spring AMQP + (http://www.springsource.org/spring-amqp) + which "applies core Spring concepts to the development of AMQP-based + messaging solutions". Spring AMQP provides similar semantics as Spring JMS + (http://.../spring-framework-reference.html#jms). + + + Whereas the provided AMQP Channel Adapters are intended for unidirectional + Messaging (send or receive), only, Spring Integration also provides inbound + and outbound AMQP Gateways for request/reply operations. + + + + Please familiarize yourself with the reference documentation of + the Spring AMQP project as well. It provides much more in-depth information + regarding Spring's integration with AMQP in general and RabbitMQ in + particular. + You can find the documentation at: + + http://static.springsource.org/spring-amqp/docs/1.0.x/reference/html/ + + +
+ +
+ Inbound Channel Adapter + + A configuration sample for an AMQP Inbound Channel Adapter is shown + below with all available parameters. + ]]> + + + + + Unique ID for this adapter. + Optional. + + + Message Channel to which converted Messages should be sent. + Required. + + + Names of the AMQP Queues from which Messages should be + consumed (comma-separated list). + Required. + + + Acknowledge Mode for the MessageListenerContainer. + Optional (Defaults to AUTO). + + + Extra AOP Advice(s) to handle cross cutting behavior associated with this Inbound Channel Adapter. + Optional. + + + Flag to indicate that channels created by this component + will be transactional. Ff true, tells the framework to use + a transactional channel and to end all operations (send or + receive) with a commit or rollback depending on the outcome, + with an exception signalling a rollback. + Optional (Defaults to false). + + + Specify the number of concurrent consumers to create. + Default is 1. Raising the number of concurrent consumers + is recommended in order to scale the consumption of + messages coming in from a queue. However, note that any + ordering guarantees are lost once multiple consumers are + registered. In general, stick with 1 consumer for + low-volume queues. + Optional. + + + Bean reference to the RabbitMQ ConnectionFactory. + Optional (Defaults to 'connectionFactory'). + + + Message Channel to which error Messages should be sent. + Optional. + + + Shall the listener channel (com.rabbitmq.client.Channel) be + exposed to a registered ChannelAwareMessageListener. + Optional (Defaults to true). + + + HeaderMapper to use when receiving AMQP Messages. + Optional. + + + Reference to the SimpleMessageListenerContainer + to use for receiving AMQP Messages. If this attribute is provided, + then no other attribute related to the listener container + configuration should be provided. In other words, by + setting this reference, you must take full responsibility + of the listener container configuration. The only exception + is the MessageListener itself. Since that is actually the + core responsibility of this Channel Adapter implementation, + the referenced listener container must NOT already have its + own MessageListener configured. + Optional. + + + The MessageConverter to use when receiving AMQP Messages. + Optional. + + + The MessagePropertiesConverter to use when receiving AMQP Messages. + Optional. + + + Specify the phase in which the underlying SimpleMessageListenerContainer + should be started and stopped. The startup order proceeds + from lowest to highest, and the shutdown order is the + reverse of that. By default this value is Integer.MAX_VALUE + meaning that this container starts as late as possible and + stops as soon as possible. + Optional. + + + Tells the AMQP broker how many messages to send to each + consumer in a single request. Often this can be set quite + high to improve throughput. It should be greater than or + equal to the transaction size (see attribute "tx-size"). + Optional (Defaults to 1). + + + Receive timeout in milliseconds. + Optional (Defaults to 1000). + + + Specifies the interval between recovery attempts of the underlying + SimpleMessageListenerContainer (in + milliseconds). + Optional (Defaults to 5000). + + + The time to wait for workers in milliseconds after the + underlying SimpleMessageListenerContainer + is stopped, and before the AMQP connection is forced closed. + If any workers are active when the shutdown signal comes + they will be allowed to finish processing as long as they + can finish within this timeout. Otherwise the connection is + closed and messages remain unacked (if the channel is + transactional). Defaults to 5000 milliseconds. + Optional (Defaults to 5000). + + + By default, the underlying SimpleMessageListenerContainer + uses a SimpleAsyncTaskExecutor implementation, that fires + up a new Thread for each task, executing it asynchronously. + By default, the number of concurrent threads is unlimited. + + NOTE: This implementation does not reuse threads. Consider + a thread-pooling TaskExecutor implementation as an alternative. + Optional (Defaults to SimpleAsyncTaskExecutor). + + + By default the underlying SimpleMessageListenerContainer + creates a new instance of the DefaultTransactionAttribute (takes + the EJB approach to rolling back on runtime, but not checked + exceptions. + Optional (Defaults to DefaultTransactionAttribute). + + + Sets a Bean reference to an external + PlatformTransactionManager on the + underlying SimpleMessageListenerContainer. The transaction + manager works in conjunction with the "channel-transacted" + attribute. + + If there is already a transaction in progress when the + framework is sending or receiving a message, and the + channelTransacted flag is true, then the commit or rollback + of the messaging transaction will be deferred until the + end of the current transaction. If the channelTransacted + flag is false, then no transaction semantics apply to the + messaging operation (it is auto-acked). For further information + see chapter 1.9 of the Spring AMQP reference guide: + + http://static.springsource.org/spring-amqp/docs/1.0.x/reference/html/#d0e525 + Optional. + + + Tells the SimpleMessageListenerContainer + how many messages to process in a single transaction (if + the channel is transactional). For best results it should + be less than or equal to the set "prefetch-count". + Optional (Defaults to 1). + + + + + Even though the Spring Integration JMS and AMQP support is very similar, + important differences exist. The JMS Inbound Channel Adapter is using a + JmsDestinationPollingSource under the covers and expects a configured Poller. + + The AMQP Inbound Channel Adapter on the other side uses a + SimpleMessageListenerContainer and is message + driven. In that regard it is more similar to the JMS Message + Driven Channel Adapter. + +
+ +
+ Outbound Channel Adapter + + A configuration sample for an AMQP Outbound Channel Adapter is shown + below with all available parameters. + ]]> + + + + + Unique ID for this adapter. + Optional. + + + Message Channel to which Messages should be sent + in order to have them converted and published to an + AMQP Exchange. + Required. + + + Bean Reference to the configured AMQP Template + Optional (Defaults to "amqpTemplate"). + + + The name of the AMQP Exchange to which Messages + should be sent. If not provided, Messages will be sent + to the default, no-name Exchange. + Optional. + + + The order for this consumer when multiple + consumers are registered thereby enabling load- + balancing and/or failover. + Optional (Defaults to Ordered.LOWEST_PRECEDENCE [=Integer.MAX_VALUE]). + + + The fixed routing-key to use when sending Messages. By + default, this will be an empty String. + Optional. + + + The routing-key to use when sending Messages + evaluated as an expression on the message (e.g. + 'payload.key'). By default, this will be an empty String. + Optional. + + + +
+ +
+ Inbound Gateway + A configuration sample for an AMQP Inbound Gateway is shown + below with all available parameters. + ]]> + + + + + Unique ID for this adapter. + Optional. + + + Message Channel to which converted Messages should be sent. + Required. + + + Names of the AMQP Queues from which Messages should be consumed (comma-separated list). + Required. + + + Extra AOP Advice(s) to handle cross cutting behavior associated with this Inbound Gateway. + Optional. + + + Specify the number of concurrent consumers to + create. Default is 1. Raising the number of concurrent + consumers is recommended in order to scale the + consumption of messages coming in from a queue. + However, note that any ordering guarantees are lost + once multiple consumers are registered. In general, + stick with 1 consumer for low-volume queues. + Optional (Defaults to 1). + + + Bean reference to the RabbitMQ ConnectionFactory. + Optional (Defaults to 'connectionFactory'). + + + Message Channel where reply Messages will be expected. + Optional. + + + +
+ +
+ Outbound Gateway + A configuration sample for an AMQP Outbound Gateway is shown + below with all available parameters. + ]]> + + + + + Unique ID for this adapter. + Optional. + + + Message Channel to which Messages should be sent + in order to have them converted and published to an + AMQP Exchange. + Required. + + + Bean Reference to the configured AMQP Template + Optional (Defaults to "amqpTemplate"). + + + The name of the AMQP Exchange to which Messages should + be sent. If not provided, Messages will be sent to the + default, no-name Exchange. + Optional. + + + The order for this consumer when multiple + consumers are registered thereby enabling load- + balancing and/or failover. + Optional (Defaults to Ordered.LOWEST_PRECEDENCE [=Integer.MAX_VALUE]). + + + Message Channel to which replies should be sent after + being received from an AQMP Queue and converted. + Optional. + + + The routing-key to use when sending Messages. By default, + this will be an empty String. + Optional. + + + The routing-key to use when sending Messages evealuated + as an expression on the message (e.g. 'payload.key'). + By default, this will be an empty String. + Optional. + + + + +
+ +
+ AMQP Backed Message Channels + + + This feature is not currently available, yet, but it is planned for the + Spring Integration 2.1 M2 release. In order to follow progress, please + visit the Spring Integration issue tracker at + + https://jira.springsource.org/browse/INT-1878 + + + +
+
+ AMQP Samples + + To experiment with the AMQP adapters, check out the samples available in + the Spring Integration Samples Git repository at: + + + + https://github.com/spring-integration-samples/basic/amqp + + + + Currently there is one sample available that demonstrates the basic + functionality of the Spring Integration AMQP Adapter using an Outbound Channel Adapter + and an Inbound Channel Adapter. As AMQP Broker implementation the sample + uses RabbitMQ (http://www.rabbitmq.com/). + + + In order to run the example you will need a running instance of RabbitMQ. + A local installation with just the basic defaults will be sufficient. + For detailed RabbitMQ installation procedures please visit: + + http://www.rabbitmq.com/install.html + + + + Once the sample application is started, you enter some text on the command prompt + and a message containing that entered text is dispatched to the AMQP queue. + In return that message is retrieved via Spring Integration and then printed + to the console. + + + The image belows illustrates the basic set of Sprign Integration components + used in this sample. + + + + + + + + + + The Spring Integration graph of the AMQP sample +
+
diff --git a/docs/src/reference/docbook/index.xml b/docs/src/reference/docbook/index.xml index 10803705cb..d727641856 100644 --- a/docs/src/reference/docbook/index.xml +++ b/docs/src/reference/docbook/index.xml @@ -135,6 +135,7 @@ + Appendices diff --git a/docs/src/reference/resources/images/spring-integration-amqp-sample-graph.png b/docs/src/reference/resources/images/spring-integration-amqp-sample-graph.png new file mode 100644 index 0000000000..7347bd82fa Binary files /dev/null and b/docs/src/reference/resources/images/spring-integration-amqp-sample-graph.png differ