2015-06-01 167 views
1

我們正在評估WSO2堆棧,特別是Message Broker v 2.2.0,並且無法使郵件重試限制工作。WSO2 2.2.0中的消息重試和死信隊列Message Broker

根據此文檔頁面,一旦客戶端已經拒絕了一個消息10次,它將被從隊列中移除並放置在死信隊列中。

https://docs.wso2.com/display/MB220/Maximum+Delivery+Attempts

缺貨排斥定義可以是:
a)不發送在使用Session.CLIENT_ACKNOWLEDGE或
B的情況下確認)在使用事務會話的情況下回滾事務。

使用WSO2示例客戶端代碼,我們無法使用客戶端確認模式或誘發故障的任意組合來觀察此行爲。該消息在隊列中保持活動狀態,並且可以從中取消任意次數。確認它或提交會話將它從隊列中移出,就像您期望的那樣。

任何人都可以確認此功能是否真正起作用,如果有,請告訴我們客戶必須做些什麼來觸發它。因爲我們無法準確地繼續WSO2不理解如何

https://docs.wso2.com/display/MB220/Sending+and+Receiving+Messages+Using+Queues

任何幫助,將不勝感激:我們一直在使用WSO2提供的樣本客戶端代碼和未修改出的現成的服務器配置測試該系統的這個方面起作用。

回答

0

此功能按預期工作。爲了測試您需要對示例代碼中提供的接收方客戶端進行一些修改。

  1. 添加指定的系統屬性
  2. 更改abknlowdgment模式CLIENT_ACK
  3. 獲取消息10次不發送ACK到服務器

有了這些變化能滿足您的要求。

我在這裏張貼在QueueReceiver對象類的修改方法

public void receiveMessages() throws NamingException, JMSException { 
    Properties properties = new Properties(); 
    System.setProperty("AndesAckWaitTimeOut", "30000"); 
    properties.put(Context.INITIAL_CONTEXT_FACTORY, QPID_ICF); 
    properties.put(CF_NAME_PREFIX + CF_NAME, getTCPConnectionURL(userName, password)); 
    System.out.println("getTCPConnectionURL(userName,password) = " + getTCPConnectionURL(userName, password)); 
    InitialContext ctx = new InitialContext(properties); 
    // Lookup connection factory 
    QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup(CF_NAME); 
    QueueConnection queueConnection = connFactory.createQueueConnection(); 
    queueConnection.start(); 
    QueueSession queueSession = 
      queueConnection.createQueueSession(false, QueueSession.CLIENT_ACKNOWLEDGE); 
    //Receive message 
    Queue queue = queueSession.createQueue(queueName); 
    MessageConsumer queueReceiver = queueSession.createConsumer(queue); 
    int count =0; 
    while (count < 12) { 
     TextMessage message = (TextMessage) queueReceiver.receive(); 
     System.out.println("Got message ==>" + message.getText()); 
     count++; 
    } 
    queueReceiver.close(); 
    queueSession.close(); 
    queueConnection.stop(); 
    queueConnection.close(); 
} 

請注意,這個修改,只是校對的功能工作正常進行。

相關問題