Я пытаюсь справиться с ситуацией управления потоком на стороне производителя.У меня есть очередь на qpid-брокере с установленным максимальным размером очереди.Также установите в очереди flow_stop_count и flow_resume_count.
теперь у производителя продолжает непрерывно генерировать сообщения до тех пор, пока не будет достигнуто значение flow_stop_count.При нарушении этого числа выдается исключение, которое обрабатывается слушателем исключений.Теперь через некоторое время потребитель в очереди наверстает упущенное и будет достигнут поток 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;
}
}
ТеперьИсключительный прослушиватель является универсальным прослушивателем исключений, поэтому не следует останавливать поток продюсера через него.
Возможно, мне нужен какой-то метод на уровне продюсера, что-то вроде produer.isFlowStopped() , который я могу использовать для проверки перед отправкой сообщения.Существует ли такая функциональность в qpid api.
На веб-сайте qpid имеется некоторая документация, в которой предлагается сделать это.Но я нигде не мог найти примеров того, как это делается.
Существует ли какой-то стандартный способ обработки такого сценария.