2015-08-27 50 views
2

Camel-Redis的序列化程序将额外字符作为消息密钥的前缀。以额外字符串为前缀的Redis序列化

当我检查了数据库,消息密钥显示类似..

"\xac\xed\x00\x05t\x00\x11test150827171118" 

正如你所看到的,字符串"\xac\xed\x00\x05t\x00\x11"

的前缀是关键"test150827171118"

我尝试了两种模式,

首先,我直接设置串行器在注册表中。

Registry.put("serializer", new StringRedisSerializer()); 

第二种模式是先在RedisTemplate中设置。然后将redis模板放入注册表中。

RedisTemplate<?, ?> template = new RedisTemplate<>(); 
template.setKeySerializer(new StringRedisSerializer()); 
template.setValueSerializer(new StringRedisSerializer()); 
registry.put("redisTemplate", template); 

两者都解决不了serizlization的问题。我是否错过了camel-redis的其他配置。

回答

1

经过五六个小时的搜索和实施,我终于在我的开发机器上找到了答案。

骆驼serializer URI选项仅适用于CONSUMER。 为了影响PRODUCER,我还需要配置一个自定义RedisTemplateStringRedisSerializer作为默认序列化程序。

redisTemplate.setDefaultSerializer(new StringRedisSerializer()); 

然后将serializer和redis模板实例放入注册表中并从Camel URI引用它。

registry.put("customTemplate", template); 
registry.put("stringSerializer", new StringRedisSerializer()); 

骆驼URI就像是......

redis://<host>:<port>?redisTemplate=#customTemplate&serializer=#stringSerializer 
+0

Yelo嗨,你有一个工作的骆驼Redis的项目?不知道如何配置RedisTemplate,获取与PropertySet相关的错误。 –