Camel-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的其他配置。
答案 0 :(得分:2)
在我的开发机器上谷歌搜索和实施五六个小时后,我终于找到了答案。
Camel serializer
URI选项仅适用于CONSUMER
。
要影响PRODUCER
,我还需要将自定义RedisTemplate
配置为StringRedisSerializer
作为默认序列化程序。
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
然后将serializer和redis模板实例放在注册表中,并从Camel URI引用它。
registry.put("customTemplate", template);
registry.put("stringSerializer", new StringRedisSerializer());
Camel URI就像......
redis://<host>:<port>?redisTemplate=#customTemplate&serializer=#stringSerializer