プロデューサー側でフロー制御の状況を処理しようとしています。最大キューサイズが設定された qpid-broker にキューがあります。また、キューに flow_stop_count と flow_resume_count を設定します。
現在、プロデューサは、この flow_stop_count に達するまでメッセージを継続的に生成し続けます。このカウントに違反すると、Exception リスナーによって処理される例外がスローされます。しばらくすると、キューのコンシューマーが追いつき、flow_resume_count に到達します。問題は、プロデューサーがこのイベントをどのように知るかです。
プロデューサーのサンプルコードは次のとおりです。
connection connection = connectionFactory.createConnection();
connection.setExceptionListenr(new MyExceptionListerner());
connection.start();
Session session = connection.createSession(false,Session.CLIENT_ACKNOWLEDGE);
Queue queue = (Queue)context.lookup("Test");
MessageProducer producer = session.createProducer(queue);
while(notStopped){
while(suspend){//---------------------------how to resume this flag???
Thread.sleep(1000);
}
TextMessage message = session.createTextMessage();
message.setText("TestMessage");
producer.send(message);
}
session.close();
connection.close();
および例外リスナーの場合
private class MyExceptionListener implements ExceptionListener {
public void onException(JMSException e) {
System.out.println("got exception:" + e.getMessage());
suspend=true;
}
}
現在、exceptionlistener は例外の一般的なリスナーであるため、それを介してプロデューサー フローを一時停止することはお勧めできません。
私が必要としているのは、メッセージを送信する前に確認するために使用できるproduer.isFlowStopped()のようなプロデューサー レベルのメソッドです。そのような機能は qpid api に存在しますか?
qpid Web サイトには、これを実行できることを示唆するドキュメントがいくつかあります。しかし、これが行われている例はどこにも見つかりませんでした。
この種のシナリオを処理する標準的な方法はありますか。