1

オーバーライド:RabbitMQ + Spring統合。キューサイズ1は、のみ削除するとき、私は今かのうである場合のRabbitMQと春の統合でこのアイデアを実装したいと思い

  1. 1つのキュー、1つのメッセージのcapatityと。
  2. コンシューマはこのメッセージを要求します。キューに存在する場合はメッセージが配信され、存在しない場合はnullまたはエラーが返されます。
  3. このメッセージ(キューに存在する場合)は、ダウンロードされたために削除されません。プロデューサが新しいメッセージをキューに入れたときにのみ削除されます。

よろしくお願いいたします。このような

答えて

0

何か:トランザクションスコープ付き

@Transactional 
public Message getMessageFromQueue(String queue) { 
    try { 
     return this.rabbitTemplate.receive(queue); 
    } 
    finally { 
     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); 
    } 
} 

我々はトランザクション内でキューをポーリングします。 setRollbackOnly()では、TXを強制的に戻し、メッセージをキューに戻します。

+0

私には例外があります: ** org.springframework.transaction.NoTransactionException:範囲内のトランザクションアスペクト管理のTransactionStatusはありません** –

+0

まず、アプリケーションコンテキストで '@ EnableTransactionManagement'を実行する必要があります。まず、https: //docs.spring.io/spring/docs/5.0.2.RELEASE/spring-framework-reference/data-access.html#transaction –

+0

最後にそれは私のために働いた。 Thk :) –

関連する問題