2

メッセージの送受信にApache nms stompを使用しようとしています。hornetq を使用しているため、Transnational ack モードを使用できません。私の消費者シナリオ:

  1. メッセージを受け取る
  2. メッセージを処理する
  3. プロセスが成功した場合は ACK を返します (message.Acknowledge() を使用)
  4. プロセスが失敗した場合は NACK (????)

私が望むのは、プロセスが失敗した場合にメッセージを NACK することだけです。どうすればApache nmsでメッセージをNACKできますか?

4

1 に答える 1

1

HornetQ でトランザクションを使用できない理由はわかりません。現在、クライアントに NACK を送信させる唯一の方法は、トランザクションを使用し、エラー時にトランザクションをロールバックすることです。構成された最大許容再配信に達すると、クライアントはメッセージに NACK を返します。

ほとんどの実装では、クライアントがメッセージに ACK を送信せずに切断すると、メッセージは別のクライアントに再配信されます。ActiveMQ の場合、ブローカーがメッセージをデッド レター キューに移動する前にこれを試行する最大回数を構成できます。

現時点では、NMS.Stomp 実装は、非同期メッセージ コールバックから例外がスローされたときにメッセージを NACK しませんが、これは賢明な機能強化になる可能性があります。プロジェクトは貢献を受け入れるので、飛び込んでください。

于 2013-04-20T10:20:43.273 に答える