在未生成名称的情况下,调用#'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]}}
有没有办法解决这个问题?
编辑:这是这个问题背后的一个短篇故事。免责声明:我是二郎新手,所以也许有更好的方法让它工作:)
我有一个基于 gen_server 的应用程序,它与 Web 浏览器保持 SSE(服务器端事件)连接。每个连接都绑定到 rabbitmq 队列。SSE 连接中断时,在给定超时后自动尝试重新连接 - 这是 Web 浏览器开箱即用的支持。为了重用以前创建的队列,我试图检查给定名称的队列(取自请求 cookie)是否已经存在。这一切都在init
回调中完成。