我为我的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);
}
}
答案 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将其序列化为总线。