【问题标题】:Consuming messages from a Hazelcast Queue only once in a distributed environment在分布式环境中仅使用一次来自 Hazelcast 队列的消息
【发布时间】:2016-11-10 14:11:07
【问题描述】:

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

当我尝试使用队列发布消息并在两个不同的 JVM 中添加项目侦听器时,我在两个不同的 JVM 中都收到了两次消息。我只想在集群/分布式环境中接收一次消息。

这是我的代码 sn-p:

消息的发布:

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");
    }

}

【问题讨论】:

    标签: queue distributed publish-subscribe hazelcast


    【解决方案1】:

    您必须轮询队列,就像标准的 java BlockingQueue 一样,才能只使用一次项目。

    String item = queue1.take()
    

    AFAIK,Hazelcast 不支持队列上的异步操作。 ItemListener 不消耗物品,它只通知物品可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2016-04-24
      • 2013-09-23
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多