Camel-Redis 的序列化程序为消息键添加了额外字符的前缀.
Camel-Redis's serializer is prefixing extra characters to message key.
当我检查数据库时,消息键显示类似..
When I checked the DB, the message key shows something like..
"xacxedx00x05tx00x11test150827171118"如你所见,字符串 "xacxedx00x05tx00x11"
为键 "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);两者都不能解决序列化问题.我是否缺少 camel-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.
Camel serializer URI 选项仅适用于 CONSUMER.为了影响 PRODUCER,我还需要配置一个自定义的 RedisTemplate,其中 StringRedisSerializer 作为默认序列化器.
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());Camel URI 就像...
Camel URI is like...
redis://<host>:<port>?redisTemplate=#customTemplate&serializer=#stringSerializer更多推荐
以额外字符串为前缀的 Redis 序列化
发布评论