Service Bus を使用して Azure でメッセージ キューを構築し、PHP SDK を使用していますが、PeekLock メッセージのタイムアウトが速すぎるという問題が発生しています。
キューに接続して PeekLock を使用してメッセージを取得できますが、メッセージの削除に 5 秒以上かかると、Azure はロックの有効期限が切れたことを示す 404 エラーをスローし、メッセージはあたかもキューに戻されます。処理されたことはありませんでした。
これは、私が使用したテストコードの例です。この例では、Azure SDK が読み込まれ、適切な名前空間が参照されていると想定しています。
<?php
// .. load the sdk and namespaces etc ...
$service_bus = ServicesBuilder::getInstance()->createServiceBusService([connection string goes here]);
$options = new ReceiveMessageOptions();
$options->setPeekLock();
$message = $service_bus->receiveQueueMessage("[queue name here]", $options);
print "message body is: " . $message->getBody();
$service_bus->deleteMessage($message);
?>
このコードは完全に実行されます。メッセージが取得され、本文が表示され、メッセージが削除されます。ただし、sleep(5);
deleteMessage() 呼び出しの直前に を挿入すると、Service Bus API は次のエラーを返します。
エラー: 指定されたロックは無効です。ロックの有効期限が切れたか、メッセージがキューから既に削除されています。
Azure portal を介してキューを作成するとき、ロック タイムアウト期間を明示的に 5 分に設定し、他のキューにさまざまなタイムアウト期間を設定して実験しましたが、すべてのキューは依然として 5 秒の有効期限に戻ります。
ここで何が間違っていますか?
問題は解決された:
Azure サポート チームから返信があり、キューの作成時に選択されたロック期間が Azure portal で保持されていないことがすぐにわかりました。デフォルトの有効期限は明らかに5秒です(ただし、どのドキュメントでもこのデフォルト値への参照を見つけることができませんでしたが、これは面倒です)。これがタイムアウトの理由です。
とにかく、開発チームは明らかに修正に取り組んでおり、すべてがすぐに機能するはずです.