从循环中返回值

时间:2010-09-21 06:10:06

标签: java rabbitmq

我正在使用rabbitMQ进行POC并编写一个程序来添加两个数字并获得响应 我们编写的用于从队列中检索值的代码运行无限时间(在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

问题是我无法从while循环中返回值(我想无限时间运行它) 我怎么能这样做,所以循环将继续,我也将循环处理数据?

4 个答案:

答案 0 :(得分: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'
}

如果您需要与循环同时进行处理,那么您将需要使用多个线程,问题会变得更复杂。

答案 1 :(得分:0)

你到底是什么意思?

如果你想留在同一个线程中,只需要调用一个函数(处理收到的一条消息而不是读取下一条消息)。

如果您需要并发(始终读取,无论您是否重新处理消息)都使用生产者/消费者模式。

创建一个线程
  • 从mq读取
  • 发布到(线程安全的)集合
  • 表明
  • 回去阅读mq

创建至少一个

的mor线程
  • 等待信号
  • 从(线程安全)集合中读取(并删除)消息
  • 处理消息
  • 回去等待信号

HTH

马里奥

答案 2 :(得分:0)

使您的返回值具有更高的可见性。 所以,你将获得它的价值

答案 3 :(得分:0)

听起来你指的是yield函数,它允许你的函数返回多个值。据我所知,Java中不支持开箱即用,但有一些projects可用于实现此功能。