集群环境中的Hazelcast IQueue会收到所有成员

时间:2016-09-23 20:31:21

标签: hazelcast

我在myproject中使用客户端服务器拓扑,并尝试在我的hazelcast服务器上执行某些操作。

我将序列化的bean放在客户端的hazelcast队列中,如下所示

IQueue<SerializedBean> queue = HzUtil.getInstance().getQueue("myqueue");

boolean  status = queue.offer(serializedBean,<timeoutvalue>,TimeUnit.MILLISECONDS );

在我的hazelcast服务器上我已经注册了监听器,我正在集群模式下运行hazelcast。

<hz:queue name="myqueue">
    <hz:item-listeners>
        <hz:item-listener implementation="myqueueImpl" include-value="true"/>
    </hz:item-listeners>
</hz:queue>


    public class MyqueueImpl implements ItemListener<SerializedBean> {

        public void itemAdded(ItemEvent<SerializedBean> inputMessage) {
            System.out.println("Item added to the queue ");
            //sometask
        }

    public void itemRemoved(ItemEvent<SerializedBean> removedItem) {

            System.out.println("Item removed from the queue ");
        }
}

问题:

我观察到队列项在群集成员上接收并拾取并执行。我希望在任何集群成员上只拾取一次该项目。请让我知道我到底缺少什么

1 个答案:

答案 0 :(得分:0)

ItemListener的工作方式与Hazelcast中的其他侦听器完全相同(除了IMap上的本地EntryListener)。根据我的理解,您正在寻找像民意调查这样的解决方案,并且使用ItemListener无法实现。请参阅有关如何仅在一个节点上检索值的文档:http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#getting-a-queue-and-putting-items