#'queue.declare'
生成されていない名前の場合は、新しく作成されたキューまたは指定された名前の既存のキューを取得するために呼び出すだけで十分です。ただし、自動生成された名前 (接頭辞で始まるamq.gen-
) を使用する場合、それほど簡単ではありません。まず、amq.
プレフィックスが制限されているため、呼び出す方法がありません#'queue.declare'{queue=<<"amq.gen-xxx">>}
。
私もオプションで遊んでみましたがpassive=true
、制限された名前を渡すことはできますが、キューが存在しないと終了エラーが発生します。以下はエラーレポートです。
** Handler sse_handler terminating in init/3
for the reason exit:{{shutdown,
{server_initiated_close,404,
<<"NOT_FOUND - no queue 'amq.gen-wzPK0nIBPzr-dwtZ5Jy58V' in vhost '/'">>}},
{gen_server,call,
[<0.62.0>,
{call,
{'queue.declare',0,
<<"amq.gen-wzPK0nIBPzr-dwtZ5Jy58V">>,
true,false,false,false,false,[]},
none,<0.269.0>},
infinity]}}
この問題を解決する方法はありますか?
編集:これは、この質問の背後にある短い話です。免責事項: 私は erlang の初心者なので、それを機能させるためのより良い方法があるかもしれません :)
Web ブラウザーとの SSE (サーバー側イベント) 接続を保持する gen_server ベースのアプリケーションがあります。各接続は rabbitmq キューにバインドされます。SSE 接続が切断されると、指定されたタイムアウト後に自動的に再接続を試みます。これは、Web ブラウザーがすぐにサポートするものです。以前に作成したキューを再利用するために、(リクエスト Cookie から取得した) 指定された名前のキューが既に存在するかどうかを確認しようとしています。それはすべてinit
コールバックで行われます。