java - Redis:使用 camel-redis 的错误序列化

标签 java serialization redis apache-camel

我在玩camel和redis。我有一条很短的路线:

from("timer://foo?period=5s")
    .to("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson")
    .split().method(SplitFeatures.class,"splitMessage")
    .to("spring-redis://localhost:6379?command=SET&serializer=#serializer");

其中 splitMessage 如下:

public static List<Message> splitMessage(@Body String body) throws IOException {

    List<Message> answer = new ArrayList<Message>();
    JsonParser parser=new JsonParser();
    JsonObject jo=(JsonObject)parser.parse(body);

    // I care only for the features array
    JsonArray features=jo.get("features").getAsJsonArray();

    for (JsonElement feature: features) {
         Message msg=new DefaultMessage();
         JsonObject jof=feature.getAsJsonObject();

         // get the key
         String id=jof.get("id").getAsString().toString();

         System.out.print(id);
         msg.setHeader(RedisConstants.KEY, id);
         msg.setHeader(RedisConstants.VALUE, jof.toString());
         answer.add(msg);
    }
    return answer;
}

一切运行顺利,但是当我检查 redis 数据库时,我发现关键是:

 "\xac\xed\x00\x05t\x00\nci11361338"

相同的前缀 "\xac\xed\x00\x05t\x00" 在值中。

显然 System.out 打印的那些看起来不错。

如您所见,我尝试添加一个序列化器,一个我在 Main 中定义的 StringRedisSerializer,如下所示:

    Main main = new Main();
main.bind("serializer", new StringRedisSerializer());

但结果是一样的(同样使用了 GenericToStringSerializer)。

有什么我想念的吗?

最佳答案

今天刚遇到这个。使用 Camel 2.18.0 和 camel-spring-redis,您需要做的就是创建一个 bean 来处理适当的序列化并将其传递给 camel 生产者定义。

  @Bean
  public RedisSerializer stringSerializer() {
    return new StringRedisSerializer();
  }

接收器声明按照您的原始帖子

 .... 
 .to("spring-redis://localhost:6379?serializer=#stringSerializer");

关于java - Redis:使用 camel-redis 的错误序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698802/

相关文章:

mysql - Redis/Memcached/MongoDB(或任何 NoSQL 系统)是否支持 MySQL 的 ON DUPLICATE KEY UPDATE?

sql - 多字符串匹配性能

java - 服务器需要客户端证书时如何使用 wsimport?

python-3.x - 如何使用 ruamel.yaml 从 YAML 文件加载 Python lambda 表达式?

c# - 通过序列化对象列表来奇怪的 Protobuf 加速

Scala酸洗: how?

java - onStart olmuyor Android Studio

java - 如何删除JasperReports生成的Excel报告中的空列

java - 使用 hashMap

java - Spring Cache 中的@Cacheable 在缓存外的redis 中存储值。我如何将它放入redis的缓存中?