【问题标题】:How to read a message only once from a queue如何从队列中只读取一次消息
【发布时间】:2016-11-29 07:56:30
【问题描述】:

我正在使用 ActiveMQ 来存储消息队列。
我正在使用 PECL Stomp 扩展来连接它。 我正在成功地发布到队列,并成功地从中读取。
如何配置队列以在我消费后删除消息?
在我的听众中,我使用

$c = new Stomp($url);
$c->subscribe('/queue/something');
echo $c->readFrame();

【问题讨论】:

  • 您可能想要确认消息的消费。 php.net/manual/en/stomp.ack.php
  • 邮件现在没有被删除吗?请提供更多上下文
  • 消息没有被删除。每次我断开连接并重新连接到队列时,我都会一遍又一遍地收到相同的消息。
  • @CharlotteDunois 承认消费成功了。但是,有没有办法在没有额外请求的情况下达到相同的效果?我的一些队列不需要非常可靠。也许订阅中的一些标题。
  • ok - 用你提供的关键字找到它(ack)stomp.github.io/stomp-specification-1.1.html#SUBSCRIBE

标签: php activemq stomp php-5.5


【解决方案1】:

您必须确认消息的消费才能将它们从队列中“删除”。你可以通过$stomp->ack($messageID) 做到这一点。

如果您不想明确确认收据,可以将ack 的$stomp->subscribe 的标头设置为auto。这将使服务器自动确认消息并假定它已正确传递。

$stomp->subscribe('/queue/something', array('ack' => 'auto'));

参考资料:
http://php.net/manual/en/stomp.ack.php
http://php.net/manual/en/stomp.subscribe.php
https://stomp.github.io/stomp-specification-1.1.html#SUBSCRIBE

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 2021-03-11
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2020-03-01
    相关资源
    最近更新 更多