SpringXD中的ErrorHandling

时间:2016-05-19 18:54:26

标签: java redis spring-xd

我为我的spring-xd设置配置了Redis作为MessageBus。当我的流失败时,数据将被推送到错误队列。我试图将它们读回并将它们推回目标队列。但我没有看到我的Sink模块接收数据。有些人可以帮助我了解我出错的地方。

代码段。

public RedisTemplate<String, byte[]> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
  final RedisTemplate<String, byte[]> template = new RedisTemplate<String, byte[]>();
  template.setConnectionFactory(redisConnectionFactory);
  template.setKeySerializer(new StringRedisSerializer());
  template.setEnableDefaultSerializer(false);
  return template;
}

List<String> listOfKeys = new ArrayList<>();
Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("ERRORS*".getBytes());
for (byte[] data : keys) {
  listOfKeys.add(new String(data, 0, data.length));
}
for (String errorQueue : listOfKeys) {
    String destinationQueue = errorQueue.replace("ERRORS:", EMPTY_STRING);
    Long size = redisTemplate.opsForList().size(errorQueue);
    for (int i = 0; i < size; i++) {
        byte[] errorEvt = redisTemplate.opsForList().rightPop(errorQueue);
        redisTemplate.opsForList().leftPush(destinationQueue, errorEvt);
    }
}

1 个答案:

答案 0 :(得分:0)

快速浏览一下代码,说它应该可以正常工作;我建议您运行redis-cli,然后输入monitor以观看redis流量。

修改

要在下面回答您的评论,这取决于您的内容类型。如果它是简单的文本,它相对容易:

"\xff\x01\x0bcontentType\x00\x00\x00\x0c\"text/plain\"2016-05-20 10:11:07"

第一部分是标题,您可以使用XD EmbeddedHeadersMessageConverter对其进行解码。

如果您的有效负载是java对象,则使用kryo将其序列化为总线。