<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration/amqp"
			xmlns:xsd="http://www.w3.org/2001/XMLSchema"
			xmlns:tool="http://www.springframework.org/schema/tool"
			xmlns:integration="http://www.springframework.org/schema/integration"
			targetNamespace="http://www.springframework.org/schema/integration/amqp"
			elementFormDefault="qualified">

	<xsd:import namespace="http://www.springframework.org/schema/beans"/>
	<xsd:import namespace="http://www.springframework.org/schema/tool"/>
	<xsd:import namespace="http://www.springframework.org/schema/integration"
				schemaLocation="https://www.springframework.org/schema/integration/spring-integration.xsd"/>

	<xsd:element name="outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint'
				with the 'expectReply = false' that will publish an AMQP Message to the provided Exchange.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="outboundType">
					<xsd:attribute name="id" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Unique ID for this adapter.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="channel" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Message Channel to which Messages should be sent in order to have them converted and
								published to an AMQP Exchange.
								If this attribute is not provided, the ID will be used to create a new DirectChannel,
								and then instead of using that
								ID as the bean name of the EventDrivenConsumer instance that hosts the MessageHandler
								responsible for publishing the
								AMQP Messages, that EventDrivenConsumer's bean name will be the ID plus the added
								suffix: ".adapter"
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type
											type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="amqp-template" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									An AmqpTemplate; if not supplied, a bean name 'amqpTemplate' is
									expected.
								</xsd:documentation>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.amqp.core.AmqpTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="wait-for-confirm">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									Set to true if you want to block the calling thread until a publisher confirm has
									been received. Requires a template configured for returns. If a confirm is not
									received within the confirm timeout or a negative acknowledgment or returned
									message is received, an exception will be thrown.
								</xsd:documentation>
							</xsd:appinfo>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="xsd:boolean xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
					<xsd:attribute name="multi-send">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									Set to true to send payloads of type Iterable&lt;Message&lt;?&gt;&gt;
									as discrete messages within a single template invocation and optionally
									wait for the confirms.
								</xsd:documentation>
							</xsd:appinfo>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="xsd:boolean xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Message Producing Endpoint for the
				'org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter'
				that will receive AMQP Messages sent to a given queue and then forward those messages to a Message
				Channel.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="inboundType">
					<xsd:attribute name="channel" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Message Channel to which converted Messages should be sent. If this attribute is not
								provided, the ID will
								be used to create a new DirectChannel, and then instead of using that ID as the bean
								name of the Channel Adapter
								instance, the bean name will be the ID plus the added suffix: ".adapter"
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="batch-mode" default="MESSAGES">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									When the listener container's 'consumerBatchEnabled' property is true,
									this attribute determines the payload type. 'MESSAGES' (default) means
									the payload will be a list of messages; 'EXTRACT_PAYLOADS' means the payload
									will be a list of converted payloads.
								</xsd:documentation>
							</xsd:appinfo>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="batchModeEnumeration xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint'
				that will publish an AMQP Message to the provided Exchange and expect a reply Message.
				The thread blocks waiting for a reply or timeout; uses 'RabbitTemplate.sendAndReceive()'.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="outboundGatewayType">
					<xsd:attribute name="amqp-template" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									An AmqpTemplate; if not supplied, a bean name 'amqpTemplate' is
									expected.
								</xsd:documentation>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.amqp.core.AmqpTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-async-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.amqp.outbound.AsyncAmqpOutboundGateway'
				that will publish an AMQP Message to the provided Exchange and expect a reply Message.
				The sending thread returns immediately; the reply is sent asynchronously; uses
				'AsyncRabbitTemplate.sendAndReceive()'.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="outboundGatewayType">
					<xsd:attribute name="async-template" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								An AsyncRabbitTemplate; if not supplied, a bean name 'asyncRabbitTemplate' is
								expected.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type
											type="org.springframework.amqp.rabbit.core.AsyncRabbitTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="inbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Messaging Gateway Endpoint for the
				'org.springframework.integration.amqp.inbound.AmqpInboundGateway' that will receive AMQP Messages
				sent to a given queue and then forward those messages to a Message Channel.
				If a reply Message is returned, it will also send that to the 'replyTo' provide by the AMQP request
				Message.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="inboundType">
					<xsd:attribute name="request-channel" use="required" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Message Channel to which converted Messages should be sent.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="reply-channel" use="optional" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Message Channel where reply Messages will be expected.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="mapped-reply-headers" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Comma-separated list of names of MessageHeaders to be mapped into the AMQP Message Properties of the AMQP reply message.
	All standard Headers (e.g., contentType) will be mapped to AMQP Message Properties while user-defined headers will be mapped to 'headers' property
	which itself is a Map.
	This can only be provided if the 'header-mapper' reference is not being set directly. The values in
	this list can also be simple patterns to be matched against the header names (e.g. "foo*" or "*foo").
	A special token 'STANDARD_REPLY_HEADERS' represents all the standard AMQP headers (replyTo, correlationId etc);
	it is included by default. If you wish to add your own headers, you must also include this token if you wish the
	standard headers to also be mapped. To map all non-standard headers the 'NON_STANDARD_HEADERS' token can be used.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="reply-timeout" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Used to set the receiveTimeout on the underlying MessagingTemplate instance
	(org.springframework.integration.core.MessagingTemplate) for receiving messages
	from the reply channel. If not specified this property will default to "1000"
	(1 second). Only applies if the container thread hands off to another thread
	before the reply is sent.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="amqp-template" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.amqp.core.AmqpTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
							<xsd:documentation>
								The AmqpTemplate bean reference to be used for sending replies.
								Defaults to `RabbitTemplate` based on the provided `ConnectionFactory`.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="default-reply-to">
						<xsd:annotation>
							<xsd:documentation>
								The 'defaultReplyTo' address with the form '(exchange)/(routingKey)'
								(or '(queueName)' - in which case the default exchange will be used
								with the queue name as the routing key)
								if the request message doesn't have 'replyTo' property.
								If this property isn't specified too, the gateway relies on
								the `AmqpTemplate` configuration.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="reply-headers-last">
						<xsd:annotation>
							<xsd:documentation>
								Whether reply headers are mapped before or after conversion from a messaging Message to
								a spring amqp Message. Set to true, for example, if you wish to override the
								contentType header set by the converter.
							</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="xsd:boolean xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="channel">
		<xsd:annotation>
			<xsd:documentation>
				Creates a point-to-point channel that is backed by an AMQP Queue.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:attribute name="message-driven" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Indicate whether this channel should be message-driven (subscribable) or not (pollable).
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="queue-name" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Provide an explicitly configured queue name. If this is not provided, then a Queue will
								be created
								implicitly with the same name as the channel itself (the "id" of this element). If this
								channel is
								not message-driven, the implicit creation will require that either an AmqpAdmin instance
								has been
								provided via the "amqp-admin" attribute or that the configured AmqpTemplate is an
								instance of RabbitTemplate.
								If the channel is message-driven, the AmqpAdmin will be created using the underlying
								listener container's
								ConnectionFactory.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="amqp-admin" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								An AmqpAdmin instance to use when declaring a Queue implicitly. This is only needed if
								an explicit
								"queue-name" is not provided and the channel is not message-driven. Even then, if the
								referenced
								AmqpTemplate is an instance of RabbitTemplate, the AmqpAdmin can be constructed from
								that template's
								ConnectionFactory.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.amqp.core.AmqpAdmin"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="publish-subscribe-channel">
		<xsd:annotation>
			<xsd:documentation>
				Creates a publish-subscribe-channel that is backed by an AMQP FanoutExchange.
				Always message-driven (subscribable).
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:attribute name="exchange" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								Reference to a FanoutExchange instance to which this channel should send Messages. If
								not provided,
								a FanoutExchange will be declared with this channel's name prefixed by "si.fanout.".
								A Queue will be declared automatically and bound to that exchange to handle the consumer
								role
								of this channel.
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.amqp.core.FanoutExchange"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="channelType">
		<xsd:annotation>
			<xsd:documentation>
				Base type for 'channel' and 'publish-subscribe-channel'.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="interceptors" type="integration:channelInterceptorsType" minOccurs="0" maxOccurs="1">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A list of ChannelInterceptor instances to be applied to this channel.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="xsd:string" use="required">
			<xsd:annotation>
				<xsd:documentation>
					Unique ID for this Message Channel.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default-delivery-mode">
			<xsd:annotation>
				<xsd:documentation>
					The default delivery mode for messages; 'PERSISTENT' or 'NON_PERSISTENT'. Overridden if the
					'header-mapper'
					sets the delivery mode. The 'DefaultHeaderMapper' sets the value if the
					Spring Integration message header 'amqp_deliveryMode' is present. If this attribute is not supplied
					and
					the header mapper doesn't set it, the default depends on the underlying spring-amqp
					'MessagePropertiesConverter'
					used by the 'RabbitTemplate'. If that is not customized at all, the default is 'PERSISTENT'.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="deliveryModeEnumeration xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="extract-payload">
			<xsd:annotation>
				<xsd:documentation>
					Set to 'true' to extract the message payload and map the o.s.messaging.Message to an
					o.s.amqp.core.Message in
					a similar manner to a pair of channel adapters. When 'false' the entire message is converted
					requiring either
					Java serializable contents or a custom message converter. Also see inbound and outbound mapped
					headers.
					Also see 'headers-last', which only applies if this is 'true'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="outbound-header-mapper">
			<xsd:annotation>
				<xsd:documentation>
					The header mapper to use when sending and 'extract-payload' is true. The default mapper is
					DefaultAmqpHeaderMapper.outboundMapper() which maps all headers except 'x-*'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="inbound-header-mapper">
			<xsd:annotation>
				<xsd:documentation>
					The header mapper to use when receiving and 'extract-payload' is true. The default mapper is
					DefaultAmqpHeaderMapper.inboundMapper() which maps all headers.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="containerAndTemplateAttributes"/>
		<xsd:attributeGroup ref="integration:subscribersAttributeGroup"/>
		<xsd:attributeGroup ref="headersLast"/>
	</xsd:complexType>

	<xsd:complexType name="outboundType">
		<xsd:annotation>
			<xsd:documentation>
				Base type for the 'outbound-channel-adapter' and 'outbound-gateway' elements.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
			<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType" minOccurs="0"
						 maxOccurs="1"/>
		</xsd:sequence>
		<xsd:attribute name="exchange-name" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The fixed name of the AMQP Exchange to which Messages should be sent. If not provided, Messages will
					be sent to the default, no-name Exchange.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="exchange-name-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The exchange name to use when sending Messages evaluated as an expression on the message (e.g.
					'headers.exchange'). By default, this will be an emtpy String.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="routing-key" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The fixed routing-key to use when sending Messages. By default, this will be an empty String.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="routing-key-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					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.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="order" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The order for this consumer when multiple consumers are registered thereby enabling load-balancing
					and/or failover.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="header-mapper" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
Reference to a bean implementing 'AmqpHeaderMapper' that maps Spring Integration MessageHeaders to/from
AMQP Message properties.
This is mutually exclusive with 'mapped-request-headers' or 'mapped-reply-headers'.
Default: DefaultAmqpHeaderMapper.
						]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.amqp.support.AmqpHeaderMapper"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="mapped-request-headers" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
Comma-separated list of names of AMQP Headers to be mapped from the AMQP request into the MessageHeaders.
This can only be provided if the 'header-mapper' reference is not being set directly. The values in
this list can also be simple patterns to be matched against the header names (e.g. "foo*" or "*foo").
A special token 'STANDARD_REQUEST_HEADERS' represents all the standard AMQP headers (replyTo, correlationId etc);
it is included by default. If you wish to add your own headers, you must also include this token if you wish the
standard headers to also be mapped. To map all non-standard headers the 'NON_STANDARD_HEADERS' token can be used.
						]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="return-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
Channel to which returned messages will be sent. Requires a RabbitTemplate with the 'mandatory'
property set to TRUE; requires a CachingConnectionFactory with the 'publisherReturns'
property set to TRUE.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="default-delivery-mode">
			<xsd:annotation>
				<xsd:documentation>
					The default delivery mode for messages; 'PERSISTENT' or 'NON_PERSISTENT'. Overridden if the
					'header-mapper'
					sets the delivery mode. The 'DefaultHeaderMapper' sets the value if the
					Spring Integration message header 'amqp_deliveryMode' is present. If this attribute is not supplied
					and
					the header mapper doesn't set it, the default depends on the underlying spring-amqp
					'MessagePropertiesConverter'
					used by the 'RabbitTemplate'. If that is not customized at all, the default is 'PERSISTENT'.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="deliveryModeEnumeration xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="lazy-connect" default="true">
			<xsd:annotation>
				<xsd:documentation>
					By default, the connection is established lazily, when the first message is sent. If you wish to
					detect
					connection configuration problems during application initialization, set this to 'false'.
					If the eager connection fails, an ERROR log will be emitted.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="confirm-correlation-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
			Expression for correlating publisher confirms to sent messages. The Rabbit API only correlates confirms
			to a channel; this is used to further correlate a confirm to a message. An example is
			"headers['amqp_confirmCorrelationData']", assuming that header contains the data.
			Messages that do not have correlation data do not generate publisher confirm messages.
			Requires a CachingConnectionFactory with the 'publisherConfirms' property set to TRUE.
							]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="confirm-ack-channel" type="xsd:string" default="nullChannel">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
			Channel to which positive publisher confirms will be sent; the payload will be the correlation data from
			the sent message. The message will also contain a header 'amqp_publishConfirm' with a value true.
			Requires a connection factory that is configured to request publisher confirms. Default
			is nullChannel in case an adapter doesn't want to use publisher confirms, but is using a
			connection factory that is configured to request them.
							]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="confirm-nack-channel" type="xsd:string" default="nullChannel">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
			Channel to which negative publisher confirms will be sent; the payload will be the correlation data from
			the sent message. The message will also contain a header 'amqp_publishConfirm' with a value false.
			Requires a connection factory that is configured to request publisher confirms. Default
			is nullChannel in case an adapter doesn't want to use publisher confirms, but is using a
			connection factory that is configured to request them.
							]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="confirm-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
			Generate a negative acknowledgment (nack) if a publisher confirm is not received within this time
			in milliseconds. Default none (nacks will not be generated).
							]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="error-message-strategy" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
					A 'ErrorMessageStrategy' implementation to build an error message for
					returned or negatively acked messages.
							]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.support.ErrorMessageStrategy"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="delay-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
			A SpEL expression that evaluates to the value that will be set on the 'x-delay' header
			when using the RabbitMQ Delayed Message Exchange plugin. Takes precedence over any
			'AmqpHeaders.DELAY' set on the outbound message.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		<xsd:attributeGroup ref="headersLast"/>
	</xsd:complexType>

	<xsd:complexType name="outboundGatewayType">
		<xsd:complexContent>
			<xsd:extension base="outboundType">
				<xsd:attribute name="id" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Unique ID for this gateway.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="request-channel" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Message Channel to which Messages should be sent in order to have them converted and
							published to an AMQP Exchange.
						</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type
										type="org.springframework.messaging.MessageChannel"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="requires-reply" type="xsd:string" use="optional" default="true">
					<xsd:annotation>
						<xsd:documentation>
							Specify whether this outbound gateway must return a non-null value. This value is
							'true' by default, and a ReplyRequiredException will be thrown when
							the underlying service returns a null value.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="reply-channel" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							Message Channel to which replies should be sent after being received from an AMQP Queue and
							converted.
						</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type
										type="org.springframework.messaging.MessageChannel"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="reply-timeout" type="xsd:string" default="30000">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
								Allows you to specify how long this gateway will wait for
								the reply message to be sent successfully to the reply channel
								before throwing an exception. This attribute only applies when the
								channel might block, for example when using a bounded queue channel that
								is currently full.

								Also, keep in mind that when sending to a DirectChannel, the
								invocation will occur in the sender's thread. Therefore,
								the failing of the send operation may be caused by other
								components further downstream.

								The "reply-timeout" attribute maps to the "sendTimeout" property of the
								underlying 'MessagingTemplate' instance (org.springframework.integration.core.MessagingTemplate).

								The value is specified in milliseconds.
							]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="mapped-reply-headers" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation><![CDATA[
		Comma-separated list of names of MessageHeaders to be mapped into the AMQP Message Properties of the AMQP reply message.
		All standard Headers (e.g., contentType) will be mapped to AMQP Message Properties while user-defined headers will be mapped to 'headers' property
		which itself is a Map.
		This can only be provided if the 'header-mapper' reference is not being set directly. The values in
		this list can also be simple patterns to be matched against the header names (e.g. "foo*" or "*foo").
		A special token 'STANDARD_REPLY_HEADERS' represents all the standard AMQP headers (replyTo, correlationId etc.);
		it is included by default. If you wish to add your own headers, you must also include this token if you wish the
		standard headers to also be mapped. To map all non-standard headers the 'NON_STANDARD_HEADERS' token can be used.
							]]></xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:simpleType name="deliveryModeEnumeration">
		<xsd:restriction base="xsd:token">
			<xsd:enumeration value="PERSISTENT"/>
			<xsd:enumeration value="NON_PERSISTENT"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:complexType name="inboundType">
		<xsd:annotation>
			<xsd:documentation>
				Base type for the 'inbound-channel-adapter' and 'inbound-gateway' elements.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Unique ID for this adapter.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="containerAttributes"/>
		<xsd:attribute name="error-channel" use="optional" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Message Channel to which error Messages should be sent.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="header-mapper" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
Reference to a bean implementing 'AmqpHeaderMapper' that maps Spring Integration MessageHeaders to/from
AMQP Message properties.
This is mutually exclusive with 'mapped-request-headers' or 'mapped-reply-headers'.
Default: DefaultAmqpHeaderMapper.
						]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.amqp.support.AmqpHeaderMapper"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="mapped-request-headers" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
Comma-separated list of names of AMQP Headers to be mapped from the AMQP request into the MessageHeaders.
This can only be provided if the 'header-mapper' reference is not being set directly. The values in
this list can also be simple patterns to be matched against the header names (e.g. "foo*" or "*foo").
A special token 'STANDARD_REQUEST_HEADERS' represents all the standard AMQP headers (replyTo, correlationId etc);
it is included by default. If you wish to add your own headers, you must also include this token if you wish the
standard headers to also be mapped. To map all non-standard headers the 'NON_STANDARD_HEADERS' token can be used.
						]]></xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-converter" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					MessageConverter to use when receiving AMQP Messages.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.amqp.support.converter.MessageConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="listener-container" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	Reference to the MessageListener container 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.
	Note that this means that the external listener container must be configured using standard Spring <bean/>
	(or @Bean) syntax. You cannot use the <rabbit:listener-container/> XML namespace support because it requires
	attributes such as queue names to be specified on a child <listener/> element and, as stated above, the
	container must not have a MessageListener defined.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type
								type="org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="queue-names" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Names of the AMQP Queues from which Messages should be consumed (comma-separated list).
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:attributeGroup name="containerAttributes">
		<xsd:attributeGroup ref="containerOnlyAttributes"/>
		<xsd:attributeGroup ref="containerAndTemplateSharedAttributes"/>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="templateAttributes">
		<xsd:attributeGroup ref="templateOnlyAttributes"/>
		<xsd:attributeGroup ref="containerAndTemplateSharedAttributes"/>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="containerAndTemplateAttributes">
		<xsd:attributeGroup ref="containerOnlyAttributes"/>
		<xsd:attributeGroup ref="templateOnlyAttributes"/>
		<xsd:attributeGroup ref="containerAndTemplateSharedAttributes"/>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="containerAndTemplateSharedAttributes">
		<xsd:attribute name="connection-factory" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to the Rabbit ConnectionFactory to be used by this component.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.amqp.rabbit.connection.ConnectionFactory"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-properties-converter" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					MessagePropertiesConverter to use when receiving AMQP Messages.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.amqp.rabbit.support.MessagePropertiesConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="templateOnlyAttributes">
		<xsd:annotation>
			<xsd:documentation>
				Attributes for a RabbitTemplate. This does not include the exchange, queue, or routingKey properties
				since those may or may not be exposed for configuration depending on what type of component uses this
				attribute group. This group also does not include any of the properties that are shared with the
				SimpleMessageListenerContainer, such as channelTransacted, connectionFactory, and
				messagePropertiesConverter.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="template-channel-transacted" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Flag to indicate that channels created by this component will be transactional.
					Only applies to messages sent to this channel, or when 'message-driven' is 'false'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="encoding" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					The encoding to use when converting between byte arrays and Strings in message properties.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-converter" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a MessageConverter to be used by this RabbitTemplate.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.amqp.support.converter.MessageConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="containerOnlyAttributes">
		<xsd:annotation>
			<xsd:documentation>
				Attributes for a SimpleMessageListenerContainer's properties other than queues, queueNames,
				messageListener, and
				autoStartup which may or may not be exposed for configuration depending on what type of component uses
				this attribute group.
				This group also does not include any of the properties that are shared with RabbitTemplate, such as
				channelTransacted,
				connectionFactory, and messagePropertiesConverter.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="channel-transacted" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Flag to indicate that channels created by this component will be transactional.
					Only applies to messages received from this channel when 'message-driven' is 'true'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="acknowledge-mode">
			<xsd:annotation>
				<xsd:documentation>
					Acknowledge Mode for the MessageListenerContainer; default 'AUTO'
					meaning the adapter automatically acknowledges the message(s)
					according to the batch-size.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="ackModeEnumeration xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="advice-chain" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.Collection"/>
					</tool:annotation>
					<xsd:documentation>
						Array of AOP Advice instances to be applied to the MessageListener.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="concurrent-consumers" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					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, use 1 consumer for low-volume queues. Mutually exclusive with 'consumers-per-queue'.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="consumers-per-queue" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Specify the number of consumers to create for each queue.
					Setting this attribute creates a 'DirectMessageListenerContainer' instead of the default
					'SimpleMessageListenerContainer'. Refer to the Spring AMQP reference documentation for
					more information about these containers.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="error-handler" use="optional" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					ErrorHandler to be configured on the underlying MessageListener container.
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.util.ErrorHandler"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="expose-listener-channel" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						Set whether to expose the listener Rabbit Channel to a registered ChannelAwareMessageListener as
						well as
						to RabbitTemplate calls.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="prefetch-count" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						Specifies 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 batch-size value.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="receive-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						The timeout for each attempt by a consumer to receive the next message.
						Not allowed when 'consumers-per-queue' is set.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="recovery-interval" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						The interval between recovery attempts, in milliseconds. The default is 5000 ms, that is, 5
						seconds.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="shutdown-timeout" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						The time to wait for workers in milliseconds after the container is stopped, and before the
						connection is forced closed.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="task-executor" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						Reference to the Executor to be used for running Consumer threads.
					</xsd:documentation>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.concurrent.Executor"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="transaction-attribute" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						The TransactionAttribute to use when the Consumer receives the AMQP Message and the Listener is
						invoked
						within a transaction. This is only applicable when a TransactionManager has been configured.
					</xsd:documentation>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.transaction.interceptor.TransactionAttribute"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="transaction-manager" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						The PlatformTransactionManager to use when the Consumer receives the AMQP Message and the
						Listener is invoked.
					</xsd:documentation>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.transaction.PlatformTransactionManager"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="tx-size" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						[DEPRECATED]
						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 prefetch count.
						Not allowed when 'consumers-per-queue' is set.
						Deprecated in favor of 'batch-size'.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="batch-size" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						How many messages to process in a single request.
						For best results it should be less than or equal to the prefetch count.
						Not allowed when 'consumers-per-queue' is set.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="missing-queues-fatal">
			<xsd:annotation>
				<xsd:appinfo>
					<xsd:documentation>
						If 'true', and none of the queues are available on the broker, the container will throw a fatal
						exception during
						startup and will stop if the queues are deleted when the container is running (after making 3
						attempts to
						passively declare the queues). If false, the container will not throw an exception and go into
						recovery mode,
						attempting to restart according to the 'recovery-interval'. Default 'true' unless
						'consumers-per-queue' is set.
					</xsd:documentation>
				</xsd:appinfo>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
	</xsd:attributeGroup>

	<xsd:attributeGroup name="headersLast">
		<xsd:attribute name="headers-last">
			<xsd:annotation>
				<xsd:documentation>
					Whether headers are mapped before or after conversion from a messaging Message to
					a spring amqp Message. Set to true, for example, if you wish to override the
					contentType header set by the converter.
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="xsd:boolean xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:simpleType name="ackModeEnumeration">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="AUTO"/>
			<xsd:enumeration value="MANUAL"/>
			<xsd:enumeration value="NONE"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="batchModeEnumeration">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="MESSAGES"/>
			<xsd:enumeration value="EXTRACT_PAYLOADS"/>
		</xsd:restriction>
	</xsd:simpleType>

</xsd:schema>
