2010-09-21 2 views
2

Я делаю POC с rabbitMQ и пишу программу для добавления двух чисел и получения ответа.
Код, который мы написали для получения значения из очереди, работает бесконечно (в цикле while), а строка (внутри цикла while) ожидает, что некоторые данные будут извлечены из очереди; пока он не получит что-то из очереди, он не пойдет на следующий раунд цикла while.
Значит, мы получаем значение внутри бесконечного цикла. И я хочу использовать это значение для моей следующей обработки.Возвращение значения из цикла


 
while (true) 
{     
     QueueingConsumer.Delivery delivery1; 
     try 
     { 
      delivery = consumer.nextDelivery(); 
//The above line waits until delivery get some value 
      String result1 = new String(delivery1.getBody()); 
      System.out.println("Result received-"+ result1); 
     } 
     catch (InterruptedException ie) 
     { 
       continue; 
     } 
} // end while 

Проблема заключается в том, что я не в состоянии вернуть значение из цикла в то время как (я хочу, чтобы запустить его бесконечное время).
Как это сделать, чтобы цикл продолжался, и я получу обработанные данные вне цикла тоже?

ответ

1

Если «обработка результата» - это операция, которая завершается быстро, то просто сделайте это в строке, например. по телефону отдельной функции, которая делает фактическую обработку:

void mainLoop() 
{ 
    while (true) 
    {     
     QueueingConsumer.Delivery delivery1; 
     try 
     { 
      delivery = consumer.nextDelivery(); 
      //The above line waits until delivery get some value 
      String result1 = new String(delivery1.getBody()); 
      System.out.println("Result received-"+ result1); 
      processResult(result1); 
     } 
     catch (InterruptedException ie) 
     { 
      continue; 
     } 
    } // end while 
} 

void processResult(String result) 
{ 
    // Do whatever needs to be done with 'result' 
} 

Если вам нужна обработка произойдут одновременно с циклом, то вам нужно будет работать с несколькими потоками, и проблема становится немного сложнее.

0

Что вы подразумеваете под этим?

Если вы хотите остаться в той же теме, просто вызовите функцию (работайте над одним полученным сообщением, а затем прочитайте следующее).

Если вам нужен параллелизм (всегда читаемый, независимо от того, перерабатываете ли вы сообщение или нет), используйте шаблон производителя/потребителя. Создать одну нить,

  • читает из квадратных метров
  • сообщений в (потокобезопасного) сбора сигналов
  • что
  • восходит читать из квадратных метров

Создать в по меньшей мере одна морская нить, которая

  • ждет сигнал
  • читает (и удаляет) сообщение от (потокобезопасных) коллекций
  • процесса сообщения
  • восходит ждать сигнала

НТН

Марио

0

Сделайте свое возвращаемое значение более видимым. Итак, вы получите доступ к его значению

0

Похоже, вы имеете в виду функцию доходности, которая позволяет вашей функции возвращать несколько значений. Насколько я знаю, это не поддерживается в Java, но есть некоторые projects, которые реализуют эту функцию.

Смежные вопросы