簡體   English   中英

如何在ActiveMQ for PHP Stomp客戶端中組織代理消息重新交付

[英]How to organize broker message redelivery in ActiveMQ for PHP Stomp client

我正在嘗試使用ActiveMQ 5.8.0和PHP Stomp擴展實現代理重新交付。 但這不能按預期工作。

回滾消息的PHP訂閱者

define('QUEUE_NAME', '/queue/Task.Test');

$stomp = new Stomp();

$stomp->subscribe(QUEUE_NAME, array(
    'activemq.prefetchSize' => 10,
));

while (true) {

    $tid = uniqid('tid');
    $stomp->begin($tid);

    try {
        $frame = $stomp->readFrame();
        if ($frame) {
            print_r($frame->headers);
            $stomp->ack($frame->headers['message-id'], array('transaction' => $tid));
            echo "Get message {$frame->headers['message-id']}, rollback it", PHP_EOL;
            $stomp->abort($tid);
        } else {
           $stomp->commit($tid);
        }
    } catch (StompException $e) {
        $stomp->abort($tid);
    }
}

ActiveMQ配置(已啟用調度程序):

    <plugins>
        <redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
            <redeliveryPolicyMap>
                <redeliveryPolicyMap>
                    <redeliveryPolicyEntries>
                        <!-- a destination specific policy -->
                        <redeliveryPolicy queue=">" maximumRedeliveries="2" redeliveryDelay="10000" />
                    </redeliveryPolicyEntries>
                    <!-- the fallback policy for all other destinations -->
                    <defaultEntry>
                        <redeliveryPolicy maximumRedeliveries="2" initialRedeliveryDelay="5000" redeliveryDelay="10000" />
                    </defaultEntry>
                </redeliveryPolicyMap>
            </redeliveryPolicyMap>
        </redeliveryPlugin>
    </plugins>

使用該配置,訂戶可以接收所有消息並回滾它們,因此它們返回到隊列,但是我希望在延遲之后重新傳遞它們。 ACK具有特殊狀態:“毒氣ack”,但我不知道如何指定它。

如何在經紀人方面啟用重新交付?

實際上,重新交付需要在STOMP協議版本> = 1.1中定義的NACK命令。 PHP Stomp客戶端僅支持1.0版,因此無法為該擴展啟用重新交付。 但是,使用nack()方法和標頭處理擴展Stomp類很容易。 希望這些信息對某人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM