2013-04-14 59 views
0

我想方法等待,直到偵聽器的事件發生。我應該如何實現這一目標? 在我的計劃,我想循環,直到事件的結果滿足一些條件,否則,我會無休止地發送請求如何暫停,直到事件發生在activeMQ

public void run(double r, double sigma, double strike, double s0, String t, int d) throws JMSException, InterruptedException { 
    double actureError = 0.0; 
    double epsilon = 0.00001; 

    // iterate until the relative error rate is less than requested (converged) 
    while ((actureError < epsilon) || (actureError > ESTIMATION_ERROR)) { 
    sendRequest(r, sigma, strike, s0, t, d); 

    Topic topic = session.createTopic("topic"); 
    MessageConsumer consumer = session.createConsumer(topic); 
    OptionMessageListener listener = new OptionMessageListener(task); 
    consumer.setMessageListener(listener); 

    double absoluteError = y * task.getSigma() 
    /Math.sqrt(task.getCount()); 
    actureError = absoluteError/(task.getAvg() + epsilon); 
    } 

    return task.getAvg() * Math.exp(-r * 252); 
} 

public void sendRequest(double r, double sigma, double strike, double s0, String t, int d) throws JMSException { 
    // send request to the client 
    MessageProducer producer = session.createProducer(queue); 
    OptionRequest request = new OptionRequest(r, sigma, strike, s0, t, d, null); 
    ObjectMessage requestMessage = session.createObjectMessage(request); 
    producer.send(requestMessage); 
} 

public class OptionMessageListener implements MessageListener { 
    private Task task; 

    public OptionMessageListener(Task task) { 
    this.task = task; 
    } 

    @Override 
    public void onMessage(Message message) { 
    if (message instanceof ObjectMessage) { 
     ObjectMessage objectMessage = (ObjectMessage) message; 
     try { 
     Result result = (Result) objectMessage.getObject();  
     double payout = result.getPayout(); 
     task.addPayout(payout); 
     } catch (JMSException e) { 
     e.printStackTrace(); 
     } 
    } 
    } 
} 

我是新來的ActiveMQ,誰能幫助我?謝謝!

回答

0

創建一個CountDownLatch設置爲1,並在主應用程序中等待它。然後,您可以讓onMessage方法在滿足條件時倒計時。這還允許您在等待呼叫時設置超時值,以便您的應用可以喚醒並檢查是否關機或進行其他工作等。

相關問題