さて、あなたができることはいくつかあります。
典型的な方法は、DLQ機能に組み込まれて使用し、ロールバックのメッセージがDLQに向かうようにすることです。その後、これらのメッセージを後で処理しようとするどのような手順をとってもかまいません。
しかし、あなたが本当にしていない複数回消費者に感動「されると、」キューにロールバックされたメッセージを保持したい場合は、それも実現することができます。
最初。 max redeliveresを1に設定します。つまり、メッセージは1回再試行されます。
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
RedeliveryPolicy policy = new RedeliveryPolicy();
policy.setMaximumRedeliveries(1);
cf.setRedeliveryPolicy(policy);
次に、セレクタで再配信されないメッセージのみを受信するようにしてください。
MessageConsumer cons = sess.createConsumer(sess.createQueue("FOOBAR"), "JMSRedelivered <> true");
ロールバックされたメッセージを読むには、逆引きセレクタで読み取る必要があります。いずれにしても、組み込みのDLQなど、ロールバックされたメッセージに対して別のキューを使用することをお勧めします。処理がずっと簡単で、エラーが発生しにくい。