2009-12-08 83 views
9

我需要隊列來執行不重複策略。可能嗎?如果是這樣,怎麼樣? (我一直在谷歌上搜索了幾個小時......)Apache ActiveMQ 5.3 - 如何配置隊列以拒絕重複郵件?

編輯:

的ActiveMQSession實現了這一行:

 // transform to our own message format here 
      ActiveMQMessage msg = ActiveMQMessageTransformation.transformMessage(message, connection); 

     // Set the message id. 
     if (msg == message) { 
      msg.setMessageId(new MessageId(producer.getProducerInfo().getProducerId(), sequenceNumber)); 
     } else { 
      msg.setMessageId(new MessageId(producer.getProducerInfo().getProducerId(), sequenceNumber)); 
      message.setJMSMessageID(msg.getMessageId().toString()); 
     } 

的ActiveMQMessageTransformation是可插拔(你可以將其設置),但如果陳述是相當不容置疑的。

任何想法,除了更改他們的代碼?

回答

1

的ActiveMQ已經重複消息檢測建 - 你是如何定義重複?如果副本具有相同的messageId - 應該丟棄

+1

(對於非特定的類名稱,我很抱歉,這已經過了一段時間) 我想定義測試重複的參數消息ID。但是,儘管您可以執行message.setId,但它正在AMQProxy中被覆蓋(!)並使用新的製造的messageId進行設置。 – Yossale 2010-01-05 12:35:33

+0

messageID由JMS提供程序設置 - 對於ActiveMQ,我們提供全局唯一的ID。使用JMS執行此操作的正確方法是設置消息頭屬性。對於ActiveMQ - 您可以使用使用生成的messageID本身 - 因爲它始終是唯一的。 – 2010-01-07 10:15:35

+0

我正在使用ActiveMQ 5.4.1。如果我設置了自定義的JMSMessageID,它不會按預期工作。 JMSMessageId由ActiveMQ內部構建。我報一個例子,在http://stackoverflow.com/questions/4934386/avoiding-duplicated-messages-on-jms-activemq – apast 2011-02-09 14:53:05