2016-07-08 76 views
0

我有一個類似的問題,因爲這後消費從Hazelcast隊列消息僅一次: Consume message only once from Topic per listeners running in cluster在分佈式環境

當我試圖使用隊列發佈消息,並在兩個不同的JVM中加入一個項目監聽器,我我兩次都收到這些消息。我想只在羣集/分佈式環境中收到消息一次。

這裏是我的代碼片段:

發佈消息:

getQueue().add("some sample message"); 

我有兩個不同的JVM配置了相同的監聽器是這樣的:

public HazelcastQueueListener(){ 
    HazelcastInstance instance = HazelcastClient.newHazelcastClient(HazelClientConfig.getClientConfig()); 
    IQueue<String> queue1 = instance.getQueue("SAMPLEQUEUE"); 
    queue1.addItemListener(this, false); 
} 

public static void main(String args[]){ 
    HazelcastQueueListener listener = new HazelcastQueueListener(); 
} 

@Override 
public void itemAdded(ItemEvent<String> arg0) { 
    // TODO Auto-generated method stub 
    if(arg0!=null){ 
     System.out.println("Item coming out of queue 1" +arg0); 
    } 
    else{ 
     System.out.println("null"); 
    } 

} 

回答

1

你必須輪詢隊列,就像一個標準的java BlockingQueue爲了消耗一個項目只有一次。

String item = queue1.take() 

AFAIK,Hazelcast不支持隊列上的異步操作。 ItemListener不消耗該項目,它只通知項目可用。

相關問題