2

我正在用rabbitMQ做一个POC并编写一个程序来添加两个数字并获得响应。
我们为从队列中检索值而编写的代码正在无限运行(在 while 循环中),并且一行(在 while 循环中)等待从队列中检索一些数据;直到它从队列中得到一些东西,它才会进入下一轮的 while 循环。
意味着我们在无限循环中获取值。我想将此值用于下一次处理。


而(真)
{                 
      QueueingConsumer.Delivery交付1;
      尝试
      {
            交付 = 消费者.nextDelivery();
//上面的行等到delivery得到一些值
            String result1 = new String(delivery1.getBody());
            System.out.println("收到的结果-"+ result1);
       }
       捕捉(InterruptedException 即)
       {
              继续;
       }
 } // 结束而

问题是我无法从 while 循环返回值(我想无限运行它)。
我该怎么做才能使循环继续,并且我也将在循环之外获取处理过的数据?

4

4 回答 4

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'
}

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

于 2010-09-21T06:45:14.280 回答
0

你到底是什么意思?

如果您想留在同一个线程中,只需调用一个函数(处理收到的一条消息,然后阅读下一条消息)。

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

  • 从 mq 读取
  • 发布到(线程安全)集合中
  • 表明
  • 返回从 mq 读取

创建至少一个 mor 线程

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

hth

马里奥

于 2010-09-21T06:23:34.960 回答
0

让您的回报价值更具可见性。因此,您将获得它的价值

于 2010-09-21T06:26:14.757 回答
0

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

于 2010-09-21T08:18:13.630 回答