ConnectionURLActiveMQのは、フェイルオーバー輸送 - 生産者/消費者が別のホスト上で動作
failover:(tcp://broker1:61616,tcp://broker2:61616)?andomize=false&jms.useAsyncSend=false&jms.dispatchAsync=false&maxReconnectAttempts=30&maxReconnectDelay=3000&jms.prefetchPolicy.queuePrefetch=1000
シナリオ:
プロデューサーがリスナー(AUTO_ACK)
create connection
put message
close connection
queue_1にメッセージを置く - ロングを持っていますこれはリスナーであるため、生きている接続
retrieves the message
puts it in queue_2 (client_ack)
定期
create connection
retrieves everything from queue_2
processes messages
ack messages
close connection
問題を実行しているスレッド - broker_1がダウンしました。 FailoverTransportはトラフィックをbroker_2にリダイレクトします。 3つの部分(Procuder、Listener、Thread)はすべてbroker_2で動作します。 broker_1が戻ってきます。 ProcuderとThreadはbroker_1に接続します。リスナーはbroker_2に残ります。驚くべきことに、onMessageは、メッセージがbroker_1のqueue_1に到達すると呼び出されますが、リスナーはbroker_2のqueue_2にメッセージを置きます。
リスナーにbroker_1の動作が再開したら、再接続するように指示するにはどうすればよいですか?あるいは、運用している間は、broker_2でProducerとThreadの作業を強制する必要がありますか?