2016-05-19 5 views
0

私はSpring-xdセットアップ用にMessageBusとしてRedisを設定しました。ストリームに障害が発生すると、データはエラーキューにプッシュされます。私はそれらを読んで、宛先キューに戻そうとしています。しかし、私のシンクモジュールがデータを受信するのを見ていない。私がどこに間違っているのか理解してくれますか?SpringXDでのErrorHandling

コードスニペット。

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

コードで一目瞭然ですが、正常に動作するはずです。 redis-cliを実行して、と入力して、赤信号のトラフィックを監視することをお勧めします。下記のコメントに答えるために

EDIT

- それはあなたのコンテンツの種類によって異なります。それは単純なテキストなら、それは比較的簡単です:

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

最初の部分は、ヘッダーです、あなたはXDのEmbeddedHeadersMessageConverterとそれをデコードすることができます。

ペイロードがJavaオブジェクトの場合、kryoを使用してバスによってシリアル化されます。

+0

ありがとうございます@Gary。私はその問題を発見した。宛先キューに接頭辞「キュー」がありません。 destinationQueue = "queue"でなければなりません。 + errorQueue.replace( "ERRORS:"、EMPTY_STRING); errorEvt(byte [] errorEvt = redisTemplate.opsForList()。rightPop(errorQueue);)を実際のペイロードに変換する方法を教えてください。テスト目的でmsgを記録したいと思います。 –

+0

私の答えに編集を参照してください。 –

関連する問題