我在玩骆驼和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 db 时,我发现关键是:
"\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)。
有什么我想念的吗?