在IBM MQ中执行读取操作后,是否会从队列中删除消息?

时间:2018-05-08 20:10:44

标签: ibm-mq apache-nifi

我正在使用Nifi从IBM MQ获取数据。它工作正常。我的问题是,一旦从MQ队列中读取消息,它是否会从队列中删除?如何从队列中读取消息而不将其从队列中删除?

2 个答案:

答案 0 :(得分:2)

  

我的问题是,一旦从MQ队列中读取消息,它就会得到   从队列中删除?

是的,这是默认行为。

  

如何从队列中读取消息而不删除它们   队列?

您可以在MQGET API调用上使用选项:MQGMO_BROWSE_FIRST,然后使用MQGMO_BROWSE_NEXT。

您也可以打开队列进行浏览。即MQOPEN API调用的MQOO_BROWSE选项。

答案 1 :(得分:-2)

听起来好像您想使用“发布/订阅”模型而不是“点对点”模型。

来自ActiveMQ

  

主题在JMS中,主题实现了发布和订阅语义。什么时候   你发布一条消息给所有订阅者   感兴趣的 - 所以零到多的订阅者都会收到一份   信息。只有当时有效订阅的订阅者   经纪人收到消息后会得到一条消息。

     

队列JMS队列实现负载均衡器语义。单身   消息将由一个消费者接收。如果没有   消息发送时可用的消费者将保留   直到有消费者可以处理消息。如果一个   消费者在收到消息之前收到消息并且不会确认消息   然后该消息将被重新传递给另一个消费者。一个队列可以   有许多消费者在可用的消息负载平衡   消费者。

如果您有一个队列,当消费者使用该消息时,它将从队列中删除,以便下一个消费者使用下一个消息。通过主题,可以为多个消费者订阅该主题并检索相同的消息而不是排他性的。

如果这些都不适合你,我不确定你正在寻找什么语义 - 一个“队列”在消费时不删除消息将永远不会让消费者访问除了第一个信息。