2014-02-26 50 views
0

我在我的應用程序中使用ActiveMQ。我的問題是如何刪除從kahadb成功使用的消息。因爲如果它沒有被刪除,我的db.data文件就會不斷增長。activemq刪除消耗的郵件

這是我的消費者;

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:8182"); 
    Connection connection = connectionFactory.createConnection(); 
    connection.start(); 
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Destination destination = session.createQueue("TEST.FOO"); 
    MessageConsumer consumer = session.createConsumer(destination); 

    MessageListener listner = new MessageListener() { 
     int count = 0; 

     public void onMessage(Message message) { 
      if (message instanceof ObjectMessage) { 
       ObjectMessage objectMessage = (ObjectMessage) message; 
       ResponseDuration responseDuration = null; 
       try { 
        responseDuration = (ResponseDuration) objectMessage.getObject(); 
        System.out.println("Received Time : " + new Date() + "Received: " + responseDuration.toString()); 
       } catch (JMSException e1) { 
        // TODO Auto-generated catch block 
        e1.printStackTrace(); 
       } 

       try { 
        ResponseDurationOperations.insertResponseDurations(responseDuration); 
        count++; 
        System.out.println("Count = " + count); 
       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    consumer.setMessageListener(listner); 
+0

任何幫助,我只是想刪除db.data文件的消息後,消費者得到的消息 – turkuaz07

+0

我的問題是相反的,我使用的是Oracle的持久性。消息被使用後會從數據庫中刪除,我怎樣才能永遠保留消息? –

+0

@NikhilJoshi:我也在尋找你的問題。目前對我們來說,消費者正在將新的協議隊列中的每個消費者消息發送出去所以我們每天都會用消息來排隊。但是肯定的是,必須有一些與ActiveMQ本身相關的東西? – timguy

回答

1

似乎ActiveMQ對持久性的含義與你(和我一樣)有不同的含義。 持久性被定義爲不會永久存在,只是爲了讓您在重新啓動服務器時避免信息丟失。 See this

您的一個選擇可能是關閉持久性。見here。 例如,通過這種方式:

ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");