// kafka-connector options: START
[[camel-spring-redis-kafka-connector-source]]
= camel-spring-redis-kafka-connector source configuration

When using camel-spring-redis-kafka-connector as source make sure to use the following Maven dependency to have support for the connector:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.kafkaconnector</groupId>
  <artifactId>camel-spring-redis-kafka-connector</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel Kafka connector version -->
</dependency>
----


The camel-spring-redis source connector supports 15 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Priority
| *camel.source.path.host* | The host where Redis server is running. | null | ConfigDef.Importance.HIGH
| *camel.source.path.port* | Redis server port number | null | ConfigDef.Importance.HIGH
| *camel.source.endpoint.channels* | List of topic names or name patterns to subscribe to. Multiple names can be separated by comma. | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.command* | Default command, which can be overridden by message header. Notice the consumer only supports the following commands: PSUBSCRIBE and SUBSCRIBE One of: [PING] [SET] [GET] [QUIT] [EXISTS] [DEL] [TYPE] [FLUSHDB] [KEYS] [RANDOMKEY] [RENAME] [RENAMENX] [RENAMEX] [DBSIZE] [EXPIRE] [EXPIREAT] [TTL] [SELECT] [MOVE] [FLUSHALL] [GETSET] [MGET] [SETNX] [SETEX] [MSET] [MSETNX] [DECRBY] [DECR] [INCRBY] [INCR] [APPEND] [SUBSTR] [HSET] [HGET] [HSETNX] [HMSET] [HMGET] [HINCRBY] [HEXISTS] [HDEL] [HLEN] [HKEYS] [HVALS] [HGETALL] [RPUSH] [LPUSH] [LLEN] [LRANGE] [LTRIM] [LINDEX] [LSET] [LREM] [LPOP] [RPOP] [RPOPLPUSH] [SADD] [SMEMBERS] [SREM] [SPOP] [SMOVE] [SCARD] [SISMEMBER] [SINTER] [SINTERSTORE] [SUNION] [SUNIONSTORE] [SDIFF] [SDIFFSTORE] [SRANDMEMBER] [ZADD] [ZRANGE] [ZREM] [ZINCRBY] [ZRANK] [ZREVRANK] [ZREVRANGE] [ZCARD] [ZSCORE] [MULTI] [DISCARD] [EXEC] [WATCH] [UNWATCH] [SORT] [BLPOP] [BRPOP] [AUTH] [SUBSCRIBE] [PUBLISH] [UNSUBSCRIBE] [PSUBSCRIBE] [PUNSUBSCRIBE] [ZCOUNT] [ZRANGEBYSCORE] [ZREVRANGEBYSCORE] [ZREMRANGEBYRANK] [ZREMRANGEBYSCORE] [ZUNIONSTORE] [ZINTERSTORE] [SAVE] [BGSAVE] [BGREWRITEAOF] [LASTSAVE] [SHUTDOWN] [INFO] [MONITOR] [SLAVEOF] [CONFIG] [STRLEN] [SYNC] [LPUSHX] [PERSIST] [RPUSHX] [ECHO] [LINSERT] [DEBUG] [BRPOPLPUSH] [SETBIT] [GETBIT] [SETRANGE] [GETRANGE] [PEXPIRE] [PEXPIREAT] [GEOADD] [GEODIST] [GEOHASH] [GEOPOS] [GEORADIUS] [GEORADIUSBYMEMBER] | "SET" | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.connectionFactory* | Reference to a pre-configured RedisConnectionFactory instance to use. | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.redisTemplate* | Reference to a pre-configured RedisTemplate instance to use. | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.serializer* | Reference to a pre-configured RedisSerializer instance to use. | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.bridgeErrorHandler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.exceptionHandler* | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.exchangePattern* | Sets the exchange pattern when the consumer creates an exchange. One of: [InOnly] [InOut] [InOptionalOut] | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.listenerContainer* | Reference to a pre-configured RedisMessageListenerContainer instance to use. | null | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.basicPropertyBinding* | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
| *camel.source.endpoint.synchronous* | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | ConfigDef.Importance.MEDIUM
| *camel.component.spring-redis.bridgeErrorHandler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | ConfigDef.Importance.MEDIUM
| *camel.component.spring-redis.basicPropertyBinding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | ConfigDef.Importance.MEDIUM
|===
// kafka-connector options: END
