我在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 ");
}
}
问题:
我观察到队列项在群集成员上接收并拾取并执行。我希望在任何集群成员上只拾取一次该项目。请让我知道我到底缺少什么
答案 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