RabbitMQ delayed_message_exchange 声明在 langohr clojure 客户端中失败
RabbitMQ delayed_message_exchange declaration fails in langohr clojure client
我正在尝试按照本文档中的描述配置 RabbitMQ 延迟消息交换:https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/
下面是我尝试将 README 中的代码示例翻译成 clojure/langohr。
(let [conn (langohr.core/connect {:host "localhost" :port 61666})
ch (langohr.channel/open conn)]
(langohr.exchange/declare ch "my-exchange" "x-delayed-message"
{"x-delayed-type" "direct"}))
可悲的是,当我 运行 这个时,我收到这个错误:
ShutdownSignalException channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - Invalid argument, 'x-delayed-type' must be an existing exchange type, class-id=40, method-id=10) com.rabbitmq.client.impl.ChannelN.asyncShutdown (ChannelN.java:509)
查看 rabbit_exchange_type_delayed_message 插件的源代码,我可以看到我的 {"x-delayed-type" "direct"}
似乎落入了该 case 语句中的默认处理程序。
我不知道为什么会这样,也不知道如何解决。
看来您需要将选项映射包装在另一个 :arguments
映射中。这里的 langohr.exchange/declare
code 显示了使用解构的 arguments
绑定作为映射对 .exchangeDeclare
的调用。
(let [conn (langohr.core/connect {:host "localhost" :port 61666})
ch (langohr.channel/open conn)]
(langohr.exchange/declare ch "my-exchange" "x-delayed-message"
{:arguments {"x-delayed-type" "direct"}}))
我正在尝试按照本文档中的描述配置 RabbitMQ 延迟消息交换:https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/
下面是我尝试将 README 中的代码示例翻译成 clojure/langohr。
(let [conn (langohr.core/connect {:host "localhost" :port 61666})
ch (langohr.channel/open conn)]
(langohr.exchange/declare ch "my-exchange" "x-delayed-message"
{"x-delayed-type" "direct"}))
可悲的是,当我 运行 这个时,我收到这个错误:
ShutdownSignalException channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - Invalid argument, 'x-delayed-type' must be an existing exchange type, class-id=40, method-id=10) com.rabbitmq.client.impl.ChannelN.asyncShutdown (ChannelN.java:509)
查看 rabbit_exchange_type_delayed_message 插件的源代码,我可以看到我的 {"x-delayed-type" "direct"}
似乎落入了该 case 语句中的默认处理程序。
我不知道为什么会这样,也不知道如何解决。
看来您需要将选项映射包装在另一个 :arguments
映射中。这里的 langohr.exchange/declare
code 显示了使用解构的 arguments
绑定作为映射对 .exchangeDeclare
的调用。
(let [conn (langohr.core/connect {:host "localhost" :port 61666})
ch (langohr.channel/open conn)]
(langohr.exchange/declare ch "my-exchange" "x-delayed-message"
{:arguments {"x-delayed-type" "direct"}}))