Redis序列化以额外的字符串为前缀 [英] Redis serialization prefixed with extra string
问题描述
Camel-Redis的序列化程序在消息密钥的前面加上了额外的字符.
Camel-Redis's serializer is prefixing extra characters to message key.
当我检查数据库时,消息键显示类似..
When I checked the DB, the message key shows something like..
"\xac\xed\x00\x05t\x00\x11test150827171118"
如您所见,字符串"\xac\xed\x00\x05t\x00\x11"
是键"test150827171118"
的前缀.
我尝试了两种模式,
首先,我直接在注册表中设置序列化器.
Firstly, I set the serializer in the registry directly.
Registry.put("serializer", new StringRedisSerializer());
第二种模式是通过首先在RedisTemplate中进行设置.然后将redis模板放入注册表中.
Second pattern is by setting in the RedisTemplate first. Then putting the redis template in the registry.
RedisTemplate<?, ?> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
registry.put("redisTemplate", template);
两者都无法解决序列化问题.我是否缺少骆驼-redis的其他配置.
Both cannot solve the problem of serizlization. Am I missing additional configuration for camel-redis.
推荐答案
经过五到六个小时的搜索并在我的开发机上实现,我终于找到了答案.
I finally found the answer after five or six hours of googling and implementing on my development machine.
骆驼serializer
URI选项仅适用于CONSUMER
.
为了影响PRODUCER
,我还需要使用StringRedisSerializer
作为默认序列化程序来配置自定义RedisTemplate
.
Camel serializer
URI options is only for CONSUMER
.
To affect PRODUCER
, I also need to configure a custom RedisTemplate
with StringRedisSerializer
as default serializer.
redisTemplate.setDefaultSerializer(new StringRedisSerializer());
然后将序列化程序和redis模板实例都放在注册表中,并从Camel URI中引用它.
Then put both the serializer and redis template instance in registry and reference it from Camel URI.
registry.put("customTemplate", template);
registry.put("stringSerializer", new StringRedisSerializer());
骆驼URI就像...
Camel URI is like...
redis://<host>:<port>?redisTemplate=#customTemplate&serializer=#stringSerializer
这篇关于Redis序列化以额外的字符串为前缀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!