2017-05-08 6 views
0

私たちのプロジェクトでは、メッセージをActiveMQにプッシュして永続化する必要があります。私は新しいメッセージを送信し、メモリの制限を超えてキューの中で最も古いメッセージをキューから削除または削除するか、新しいキューに入れ替える必要があります。ActiveMQメモリ制限を超えた後でキューからのメッセージのドロップを開始します。

私はキュー全体をクリアしたくありません。キューは私たちの製品のフェールセーフメッセージバックログのように動作しますので、最後のx個のメッセージをキューに保存する必要があります。

私はこれまでGoogleから見たことがありませんでした。ここで

が私のポリシーのsettings.xmlが立ち退きポリシーオブジェクトのみがトピックに適用されます

<destinationPolicy> 
     <policyMap> 
      <policyEntries> 
       <policyEntry queue=">" producerFlowControl="false" memoryLimit="5mb" > 

        <messageEvictionStrategy> 
        <oldestMessageEvictionStrategy/> 
        </messageEvictionStrategy> 

      <pendingMessageLimitStrategy> 
       <constantPendingMessageLimitStrategy limit="100"/> 
      </pendingMessageLimitStrategy> 

       </policyEntry> 
      </policyEntries> 
     </policyMap> 
    </destinationPolicy> 

答えて

1

あるキューのサービス契約は、彼らがどちらかになるまで、それはすべてのメッセージを格納することであるとして、あなたはキュー上でそれらを使用することはできません消費されたか、またはそれらの寿命は、設定されたTTL値によって失効する。ブローカはメッセージをキューに格納してメモリから削除することができますが、トピックでは契約が緩くなり、メモリ内にあるメッセージがTopicコンシューマにディスパッチされるのを待機させることができます。

キュー内のメッセージの有効期間は、TTL値でのみ制御できます。

+0

ありがとうございます。 –

0

私たちが削除したり消費したりするまで、永続メッセージをディスクから削除することはできません。 producerFlowControlを有効にして、プロデューサを調整して、古いメッセージをキューから消費した後に新しいメッセージを受け入れるようにするか、TimがメッセージのTTLを設定するよう提案します。

+0

ありがとうございます。 –

関連する問題