【问题标题】:Redis serialization prefixed with extra string以额外字符串为前缀的 Redis 序列化
【发布时间】:2015-08-27 09:42:15
【问题描述】:

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);

两者都不能解决序列化问题。我是否缺少 camel-redis 的其他配置。

【问题讨论】:

    标签: redis apache-camel


    【解决方案1】:

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

    Camel serializer URI 选项仅适用于 CONSUMER。 要影响PRODUCER,我还需要配置一个自定义RedisTemplate,并使用StringRedisSerializer 作为默认序列化程序。

    redisTemplate.setDefaultSerializer(new StringRedisSerializer());
    

    然后将序列化器和redis模板实例都放入注册表,并从Camel URI中引用。

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

    Camel URI 就像...

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

    【讨论】:

    • 嗨 Yelo,你有工作的骆驼 redis 项目吗?不知道如何配置 RedisTemplate,出现与 PropertySet 相关的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2017-11-30
    • 2017-07-29
    相关资源
    最近更新 更多