<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration/redis"
			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/redis"
			elementFormDefault="qualified">

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

	<xsd:annotation>
		<xsd:documentation><![CDATA[
			Defines the configuration elements for Spring Integration Redis Adapters and Channels.
		]]></xsd:documentation>
	</xsd:annotation>

	<xsd:element name="publish-subscribe-channel">
		<xsd:annotation>
			<xsd:documentation>
				Defines a 'org.springframework.integration.redis.channel.SubscribableRedisChannel' that is backed by a
				Redis topic.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="channelType">
					<xsd:attribute name="topic-name" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>
								Name of the Redis topic that backs this channel.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="channelType">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
	Base type for Redis backed Message Channels (either 'channel' for a
	list-backed channel or 'publish-subscribe-channel' for a topic-backed channel).
			]]></xsd:documentation>
			<xsd:appinfo>
				<tool:annotation>
					<tool:exports type="org.springframework.integration.channel.AbstractMessageChannel"/>
				</tool:annotation>
			</xsd:appinfo>
		</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>
					ID for this channel. Required.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="connection-factory" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Reference to a RedisConnectionFactory. If none is provided, the default
					bean name for the reference will be "redisConnectionFactory".
				</xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.data.redis.connection.RedisConnectionFactory"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="task-executor" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for executing
	Redis listener invokers. Default is a SimpleAsyncTaskExecutor.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="java.util.concurrent.Executor"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="message-converter" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	A reference to the MessageConverter strategy for converting between Redis Messages
	and the Spring Integration Message payloads. Default is a SimpleMessageConverter.
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.integration.support.converter.MessageConverter"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="serializer" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation><![CDATA[
	A reference to the RedisSerializer strategy
				]]></xsd:documentation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attributeGroup ref="integration:subscribersAttributeGroup"/>
	</xsd:complexType>

	<xsd:element name="inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.redis.inbound.RedisInboundChannelAdapter' for subscribing to a Redis
				channel.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:attributeGroup ref="integration:channelAdapterAttributes"/>
			<xsd:attribute name="connection-factory" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Reference to a RedisConnectionFactory. If none is provided, the default
						bean name for the reference will be "redisConnectionFactory".
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.data.redis.connection.RedisConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="topics" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Redis topic names as a comma-delimited list of Strings.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="topic-patterns" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Redis topic patterns as a comma-delimited list of Strings.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="message-converter" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
	A reference to the MessageConverter strategy for converting between Redis Messages
	and the Spring Integration Message payloads. Default is a SimpleMessageConverter.
					]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.support.converter.MessageConverter"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="error-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Identifies channel that error messages will be sent to if a failure occurs in this
						gateway's invocation. If no "error-channel" reference is provided, this gateway will
						propagate Exceptions to the caller. To completely suppress Exceptions, provide a
						reference to the "nullChannel" here.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="serializer" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<xsd:documentation>
							Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer.
							This attribute can be an empty string, which results in 'null' being used by the underlying
							adapter,
							meaning no serializer is used and the raw byte[] will be the message payload.
						</xsd:documentation>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="task-executor" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for executing
						Redis listener invokers. Default is a SimpleAsyncTaskExecutor.
					]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="java.util.concurrent.Executor"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.redis.outbound.RedisPublishingMessageHandler' that
				a data to the Redis channel.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="redisAdapterType">
					<xsd:all>
						<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
									 minOccurs="0" maxOccurs="1"/>
					</xsd:all>
					<xsd:attribute name="topic" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Specifies the Redis topic.
								This attribute is mutually exclusive with the 'topic-expression' attribute.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="topic-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Specifies the SpEL expression to determine the Redis topic using the Message at runtime.
								This attribute is mutually exclusive with the 'topic' attribute.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="message-converter" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	A reference to the MessageConverter strategy for converting between Redis Messages
	and the Spring Integration Message payloads. Default is a SimpleMessageConverter.
							]]></xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type
											type="org.springframework.integration.support.converter.MessageConverter"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="order" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
	Specifies the order for invocation when this adapter is connected as a
	subscriber to a SubscribableChannel.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="serializer" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									Reference to an instance of
									org.springframework.data.redis.serializer.RedisSerializer
								</xsd:documentation>
								<tool:annotation kind="ref">
									<tool:expected-type
											type="org.springframework.data.redis.serializer.RedisSerializer"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="store-inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Polling Channel Adapter for the
				'org.springframework.integration.redis.inbound.RedisStoreMessageSource' that creates a Message which
				contains a view into a redis store. THe view could be one of the subclasses of
				org.springframework.data.redis.support.collections.RedisStore
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="redisCollectionInboundAdapterType">
					<xsd:attribute name="collection-type">
						<xsd:annotation>
							<xsd:documentation>
								Collection type supported by this adapter
							</xsd:documentation>
						</xsd:annotation>
						<xsd:simpleType>
							<xsd:union memberTypes="redisTypeEnumeration xsd:string"/>
						</xsd:simpleType>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="store-outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.redis.outbound.RedisStoreWritingMessageHandler'
				that writes the contents of the Message into
				'org.springframework.data.redis.support.collections.RedisStore'
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="redisAdapterType">
					<xsd:all>
						<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
									 minOccurs="0" maxOccurs="1"/>
					</xsd:all>
					<xsd:attributeGroup ref="storeAdapterAttributeGroup"/>
					<xsd:attribute name="redis-template" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>
								RedisTemplate to be used with this adapter
							</xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="org.springframework.data.redis.core.RedisTemplate"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="queue-inbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Message Producing Endpoint for the
				'org.springframework.integration.redis.inbound.RedisQueueMessageDrivenEndpoint' for listening a Redis
				queue.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="redisAdapterType">
					<xsd:attribute name="queue" type="xsd:string" use="required">
						<xsd:annotation>
							<xsd:documentation>
								Redis queue name.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="error-channel" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
						Identifies the channel to which error messages will be sent if a failure occurs in this
						Endpoint's process. If no "error-channel" reference is provided, this Endpoint will
						propagate Exceptions to the caller. To completely suppress Exceptions, provide a
						reference to the "nullChannel" here.
					]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="serializer" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									Reference to an instance of
									org.springframework.data.redis.serializer.RedisSerializer.
									It can be specified as an empty String value, which means the Endpoint's
									'serializer' property is
									set to 'null', in which case the Message will contain the raw byte[] payload.
								</xsd:documentation>
								<tool:annotation kind="ref">
									<tool:expected-type
											type="org.springframework.data.redis.serializer.RedisSerializer"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="receive-timeout" type="xsd:string" default="1000">
						<xsd:annotation>
							<xsd:documentation>
								Specify the timeout in milliseconds to wait for the result of the
								'rightPop' operation on Redis queue.
								Default is 1 second.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="recovery-interval" type="xsd:string" default="5000">
						<xsd:annotation>
							<xsd:documentation>
								Specify the time in milliseconds for which the listener task should sleep after catching
								an Exception on a Redis operation, before restarting the listener task.
								Default is 5 seconds.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="expect-message" type="xsd:string" default="false">
						<xsd:annotation>
							<xsd:documentation>
								When true, specifies that the 'byte[]' from a Redis message should be deserialized
								as an entire Spring Integration Message. Otherwise the data becomes just the
								payload of the message (deserialized or not).
								If this attribute is 'true', the 'serializer' must not be an empty String.
								Default is 'false'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="right-pop" type="xsd:string" default="true">
						<xsd:annotation>
							<xsd:documentation>
								When 'false', specifies that data is read using a 'left pop' operation instead of a
								'right pop'.
								Default is 'true'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="task-executor" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for executing
								the listening task on the Redis queue. Default is a SimpleAsyncTaskExecutor.
							]]></xsd:documentation>
							<xsd:appinfo>
								<tool:annotation kind="ref">
									<tool:expected-type type="java.util.concurrent.Executor"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="queue-inbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Defines a Messaging Gateway Endpoint for the
				'org.springframework.integration.redis.inbound.RedisQueueInboundGateway' that adapts incoming Redis
				values to Spring Integration Messages and returns a reply.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<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="queue" type="xsd:string" use="required">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Redis 'control' queue (list). Requests contain a conversation UUID which represents the
						key of an incoming Redis List to 'pop' a value. The sender sends the actual
						request to that list and waits for the reply on a list with key '<UUID>.reply'
						to which this gateway will send the reply.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="serializer" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<xsd:documentation>
							Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer.
							It can be specified as an empty String value, which means the Endpoint's 'serializer'
							property is set to 'null', in which case the Message will contain the raw byte[] payload.
						</xsd:documentation>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
						</tool:annotation>
					</xsd:appinfo>
				</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.
					</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="request-timeout" type="xsd:string"/>
			<xsd:attribute name="reply-channel" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Message Channel to which replies for this gateway 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-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="connection-factory" use="optional" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Reference to the Redis 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="receive-timeout" type="xsd:string" default="1000">
				<xsd:annotation>
					<xsd:documentation>
						Specify the timeout in milliseconds to wait for the result of the
						'rightPop' operation on Redis queue.
						Default is 1 second.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="recovery-interval" type="xsd:string" default="5000">
				<xsd:annotation>
					<xsd:documentation>
						Specify the time in milliseconds for which the listener task should sleep after catching
						an Exception on a Redis operation, before restarting the listener task.
						Default is 5 seconds.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="task-executor" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						A reference to a Spring TaskExecutor (or standard JDK 1.5+ Executor) for executing
						Redis listener invokers. Default is a SimpleAsyncTaskExecutor.
					]]></xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="java.util.concurrent.Executor"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="extract-payload" type="xsd:string" default="true">
				<xsd:annotation>
					<xsd:documentation>
						When true, specifies that gateway deals only with the payload of the message.
						Otherwise it expects the Redis 'value' to be a serialized 'Message'.
						This option is applied to both the request and reply operations.
						Defaults to 'true'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="queue-outbound-channel-adapter">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.redis.outbound.RedisQueueOutboundChannelAdapter'
				to store data into the Redis List in a queue manner.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:complexContent>
				<xsd:extension base="redisAdapterType">
					<xsd:all>
						<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
						<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
									 minOccurs="0" maxOccurs="1"/>
					</xsd:all>
					<xsd:attribute name="queue" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Specifies the name of the Redis queue.
								This attribute is mutually exclusive with 'queue-expression' attribute.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="queue-expression" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Specifies the expression to determine the name of the Redis queue
								against the Message at runtime.
								This attribute is mutually exclusive with 'queue' attribute.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="order" type="xsd:string">
						<xsd:annotation>
							<xsd:documentation><![CDATA[
								Specifies the order for invocation when this adapter is connected as a
								subscriber to a SubscribableChannel.
							]]></xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="serializer" type="xsd:string">
						<xsd:annotation>
							<xsd:appinfo>
								<xsd:documentation>
									Reference to an instance of
									org.springframework.data.redis.serializer.RedisSerializer
								</xsd:documentation>
								<tool:annotation kind="ref">
									<tool:expected-type
											type="org.springframework.data.redis.serializer.RedisSerializer"/>
								</tool:annotation>
							</xsd:appinfo>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="extract-payload" type="xsd:string" default="true">
						<xsd:annotation>
							<xsd:documentation>
								Specifies if the Message payload or the entire (serialized) Message will be send
								to the Redis queue.
								Default is 'true'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
					<xsd:attribute name="left-push" type="xsd:string" default="true">
						<xsd:annotation>
							<xsd:documentation>
								When 'false', specifies that data is written using a 'right push' operation instead
								of a 'left push'.
								Default is 'true'.
							</xsd:documentation>
						</xsd:annotation>
					</xsd:attribute>
				</xsd:extension>
			</xsd:complexContent>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="queue-outbound-gateway">
		<xsd:annotation>
			<xsd:documentation><![CDATA[
				Configures a Consumer Endpoint for the
				'org.springframework.integration.redis.outbound.RedisQueueOutboundGateway' that
				 pushes a conversation UUID to the the 'queue', then pushes the value to the
				Redis List with that UUID as a key and receives a reply from the Redis List with
				'<UUID>.reply' as its key. A new UUID is used for each interaction.
			]]></xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:choice minOccurs="0" maxOccurs="3">
				<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="transactional" type="integration:transactionalType" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
							 minOccurs="0" maxOccurs="1"/>
			</xsd:choice>
			<xsd:attribute name="id" type="xsd:string"/>
			<xsd:attribute name="queue" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Redis queue (list) to which send the conversation UUID representing the key of the list
						to which the actual request is pushed. The is the 'control' queue used by
						inbound gateways. This gateway will wait for the reply from a list with a key
						'<UUID>.reply'.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="order" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
						Specifies the order for invocation when this adapter is connected as a
						subscriber to a SubscribableChannel.
					]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="serializer" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<xsd:documentation>
							Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer
						</xsd:documentation>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="extract-payload" type="xsd:string" default="true">
				<xsd:annotation>
					<xsd:documentation>
						Specifies if the Message payload or the entire
						(serialized) Message will be used as the Redis 'value'.
						This option is applied for both request and reply operations.
						Default is 'true'.
					</xsd:documentation>
				</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="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" use="optional" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Message Channel where reply Messages will be sent.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="request-channel" use="optional" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Message Channel where request Messages will be expected.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="connection-factory" use="optional" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Reference to the Redis 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:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
		</xsd:complexType>
	</xsd:element>

	<xsd:element name="outbound-gateway">
		<xsd:annotation>
			<xsd:documentation>
				Configures a Consumer Endpoint for the
				'org.springframework.integration.redis.outbound.RedisOutboundGateway' that
				perform a Redis command based on the 'command-expression' evaluation result.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:complexType>
			<xsd:choice minOccurs="0" maxOccurs="2">
				<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="transactional" type="integration:transactionalType" minOccurs="0" maxOccurs="1"/>
				<xsd:element name="request-handler-advice-chain" type="integration:handlerAdviceChainType"
							 minOccurs="0" maxOccurs="1"/>
			</xsd:choice>
			<xsd:attributeGroup ref="integration:smartLifeCycleAttributeGroup"/>
			<xsd:attribute name="connection-factory" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Reference to a RedisConnectionFactory. If none is provided, the default
						bean name for the reference will be "redisConnectionFactory".
						Mutually exclusive with 'redis-template' attribute.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.data.redis.connection.RedisConnectionFactory"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="redis-template" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						RedisTemplate to be used with this gateway.
						Mutually exclusive with 'connection-factory' attribute.
					</xsd:documentation>
					<xsd:appinfo>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.data.redis.core.RedisTemplate"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="request-channel" type="xsd:string">
				<xsd:annotation>
					<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
						'false' by default, otherwise 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: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="order" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation><![CDATA[
								Specifies the order for invocation when this adapter is connected as a
								subscriber to a SubscribableChannel.
							]]></xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="arguments-serializer" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<xsd:documentation>
							Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer.
							Used to serialize each command argument to byte[] if necessary.
						</xsd:documentation>
						<tool:annotation kind="ref">
							<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="command-expression" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						SpEL expression that returns the command key. Default is the 'redis_command' message header.
						The command must not be evaluated to 'null'.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="argument-expressions" type="xsd:string">
				<xsd:annotation>
					<xsd:documentation>
						Comma-separated SpEL expressions that will be evaluated as command arguments.
						Mutually exclusive with the 'arguments-strategy' attribute. If 'use-command-variable' is
						specified to 'true', the '#cmd' variable will be presented within evaluation context.
						Argument expressions may evaluate to 'null', to support a variable number of arguments.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="use-command-variable" type="xsd:string" default="false">
				<xsd:annotation>
					<xsd:documentation>
						Specifies, if the evaluated Redis command string will be made available
						as the '#cmd' variable in the SpEL evaluation context in the
						org.springframework.integration.redis.outbound.ExpressionArgumentsStrategy
						when 'argument-expressions' is
						configured, otherwise this attribute is ignored.
					</xsd:documentation>
				</xsd:annotation>
			</xsd:attribute>
			<xsd:attribute name="arguments-strategy" type="xsd:string">
				<xsd:annotation>
					<xsd:appinfo>
						<xsd:documentation>
							Reference to an instance of
							org.springframework.integration.redis.outbound.ArgumentsStrategy.
							Mutually exclusive with the 'argument-expressions' attribute. By default the 'payload' is
							used
							as the command argument(s). To disable any strategy (no arguments) this attribute should be
							configured as an empty string.
						</xsd:documentation>
						<tool:annotation kind="ref">
							<tool:expected-type
									type="org.springframework.integration.redis.outbound.ArgumentsStrategy"/>
						</tool:annotation>
					</xsd:appinfo>
				</xsd:annotation>
			</xsd:attribute>
		</xsd:complexType>
	</xsd:element>

	<xsd:complexType name="redisAdapterType">
		<xsd:annotation>
			<xsd:documentation>
				Common configuration for Redis adapters.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:attributeGroup ref="integration:channelAdapterAttributes"/>
		<xsd:attribute name="connection-factory" type="xsd:string">
			<xsd:annotation>
				<xsd:appinfo>
					<tool:annotation kind="ref">
						<tool:expected-type type="org.springframework.data.redis.connection.RedisConnectionFactory"/>
					</tool:annotation>
				</xsd:appinfo>
			</xsd:annotation>
		</xsd:attribute>
	</xsd:complexType>

	<xsd:complexType name="redisCollectionInboundAdapterType">
		<xsd:complexContent>
			<xsd:extension base="redisAdapterType">
				<xsd:sequence>
					<xsd:element ref="integration:poller" minOccurs="0" maxOccurs="1"/>
				</xsd:sequence>
				<xsd:attribute name="redis-template" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							RedisTemplate to be used with this adapter
						</xsd:documentation>
						<xsd:appinfo>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.data.redis.core.RedisTemplate"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="key-expression" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							SpEL expression that returns the name of the key for the collection being used. If you want
							to provide a
							constant key, use the 'key' attribute.
							This attribute is mutually exclusive with the 'key' attribute.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="key" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>
							The name of the key for the collection being used. If you require a key to be dynamically
							determined per each poll use 'key-expression' attribute.
							This attribute is mutually exclusive with the 'key-expression' attribute.
						</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="key-serializer" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<xsd:documentation>
								Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer
								to serialize the 'key' value for this collection. Please refer to the JavaDoc of the
								RedisTemplate
								for more detail.
							</xsd:documentation>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="value-serializer" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<xsd:documentation>
								Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer
								to serialize the 'value' entered into the collection. Please refer to the JavaDoc of the
								RedisTemplate
								for more detail.
							</xsd:documentation>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="hash-key-serializer" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<xsd:documentation>
								Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer
								to be used when serializing hash keys (only relevant for hash-typed collections).
								Please refer to the JavaDoc of the RedisTemplate for more detail.
							</xsd:documentation>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="hash-value-serializer" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<xsd:documentation>
								Reference to an instance of org.springframework.data.redis.serializer.RedisSerializer
								to be used when serializing hash values (only relevant for hash-typed collections).
								Please refer to the JavaDoc of the RedisTemplate for more detail.
							</xsd:documentation>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.data.redis.serializer.RedisSerializer"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
				<xsd:attribute name="error-channel" type="xsd:string">
					<xsd:annotation>
						<xsd:appinfo>
							<xsd:documentation>
								Channel to which Error Messages will be sent.
							</xsd:documentation>
							<tool:annotation kind="ref">
								<tool:expected-type type="org.springframework.messaging.MessageChannel"/>
							</tool:annotation>
						</xsd:appinfo>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:attributeGroup name="storeAdapterAttributeGroup">
		<xsd:attribute name="key" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					Provide the name of the key for the collection being used. If you require a key that
					is determined dynamically for each message, use the 'key-expression' attribute.
					The default key is dynamically determined from the 'redis_key' header.
					This attribute is mutually exclusive with the 'key-expression' attribute.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="key-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					SpEL expression that returns the name of the key for the collection being used. If you want to
					provide a
					constant key, use the 'key' attribute. Default is the 'redis_key' message header.
					This attribute is mutually exclusive with the 'key' attribute.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="map-key-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					SpEL expression that returns the name of the key for entry being stored. Only applies
					if the 'collection-type' is MAP or PROPERTIES and 'extract-payload-elements' is false.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="zset-increment-expression" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					SpEL expression that returns the INCR flag for the ZADD command. Only applies
					if the 'collection-type' is ZSET.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="extract-payload-elements" type="xsd:string">
			<xsd:annotation>
				<xsd:documentation>
					If set to 'true' (Default) and the payload is an instance of a "multi-value" object (i.e.,
					Collection or Map)
					it will be stored using addAll/putAll semantics. Otherwise, if set to 'false' the payload will be
					stored
					as single entry regardless of its type.
					If the payload is not an instance of a "multi-value" object, the value of this attribute is ignored
					and
					the payload will always be stored as a single entry.
				</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="collection-type">
			<xsd:annotation>
				<xsd:documentation>
					Collection type supported by this adapter
				</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:union memberTypes="redisTypeEnumeration xsd:string"/>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:attributeGroup>

	<xsd:simpleType name="redisTypeEnumeration">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="LIST">
				<xsd:annotation>
					<xsd:documentation>
						[DEFAULT] Redis List
					</xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="SET">
				<xsd:annotation>
					<xsd:documentation>
						Redis Set
					</xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="ZSET">
				<xsd:annotation>
					<xsd:documentation>
						Redis Sorted Set
					</xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="MAP">
				<xsd:annotation>
					<xsd:documentation>
						Redis Map
					</xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
			<xsd:enumeration value="PROPERTIES">
				<xsd:annotation>
					<xsd:documentation>
						Redis Properties
					</xsd:documentation>
				</xsd:annotation>
			</xsd:enumeration>
		</xsd:restriction>
	</xsd:simpleType>

</xsd:schema>
