仅在分布式环境中使用来自Hazelcast队列的消息一次

时间:2016-07-08 05:18:56

标签: queue distributed publish-subscribe hazelcast

我和这篇文章有类似的问题: Consume message only once from Topic per listeners running in cluster

当我尝试使用队列发布消息并在两个不同的JVM中添加项侦听器时,我在两个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 个答案:

答案 0 :(得分:2)

您必须像标准java BlockingQueue一样轮询队列,以便只使用一次项目。

String item = queue1.take()

AFAIK,Hazelcast不支持队列上的异步操作。 ItemListener不会使用该项目,只会通知项目可用。