我在玩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/