我正在使用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循环中返回值(我想无限时间运行它) 我怎么能这样做,所以循环将继续,我也将循环处理数据?
答案 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)
你到底是什么意思?
如果你想留在同一个线程中,只需要调用一个函数(处理收到的一条消息而不是读取下一条消息)。
如果您需要并发(始终读取,无论您是否重新处理消息)都使用生产者/消费者模式。
创建一个线程创建至少一个
的mor线程HTH
马里奥
答案 2 :(得分:0)
使您的返回值具有更高的可见性。 所以,你将获得它的价值
答案 3 :(得分:0)
听起来你指的是yield函数,它允许你的函数返回多个值。据我所知,Java中不支持开箱即用,但有一些projects可用于实现此功能。