如何删除source_name为空的RabbitMQ绑定?rabbitmqadmin操作失败求助
如何删除RabbitMQ中source_name为空的绑定记录?
问题现象
执行rabbitmqctl list_bindings后,发现两条source_name为空的绑定记录,这类绑定属于**默认交换机(名称为空的exchange)**到队列的绑定:
root@beb46cb4b84f:/# rabbitmqctl list_bindings Listing bindings for vhost /... source_name source_kind destination_name destination_kind routing_key arguments exchange topic_task_worker_manufacture queue topic_task_worker_manufacture [] exchange topic_task_worker queue topic_task_worker [] topic_task exchange topic_task_worker_manufacture queue manufacture.node [] topic_task exchange topic_task_worker queue parse.step []
错误尝试及报错
尝试用rabbitmqadmin删除时,因参数格式错误触发报错:
root@beb46cb4b84f:/# rabbitmqadmin delete binding source="" destination_type="queue" destination="topic_task_worker" properties_key="topic_task_worker" -u xxxx -p xxxx Traceback (most recent call last): File "/usr/local/bin/rabbitmqadmin", line 1185, in <module> main() File "/usr/local/bin/rabbitmqadmin", line 524, in main method() File "/usr/local/bin/rabbitmqadmin", line 767, in invoke_delete (obj_type, uri, upload) = self.declare_delete_parse(DELETABLE) File "/usr/local/bin/rabbitmqadmin", line 787, in declare_delete_parse (uri, upload) = self.parse_args(self.args[1:], obj) File "/usr/local/bin/rabbitmqadmin", line 839, in parse_args uri = uri_template.format(**uri_args) KeyError: 'source'
报错原因:删除默认交换机的绑定时,需明确指定source的类型,且参数应使用routing_key而非properties_key。
正确解决方法
方法1:修正rabbitmqadmin命令参数
明确指定source类型为exchange,同时替换参数名,命令如下:
# 删除topic_task_worker队列的空source绑定 rabbitmqadmin delete binding source_type="exchange" source="" destination_type="queue" destination="topic_task_worker" routing_key="topic_task_worker" -u 用户名 -p 密码 # 删除topic_task_worker_manufacture队列的空source绑定 rabbitmqadmin delete binding source_type="exchange" source="" destination_type="queue" destination="topic_task_worker_manufacture" routing_key="topic_task_worker_manufacture" -u 用户名 -p 密码
方法2:使用RabbitMQ HTTP API删除
通过curl直接调用RabbitMQ管理API(默认端口15672),注意vhost为/时需URL编码为%2F:
# 删除topic_task_worker队列的绑定 curl -u 用户名:密码 -X DELETE "http://localhost:15672/api/bindings/%2F/e/%2F/q/topic_task_worker/topic_task_worker" # 删除topic_task_worker_manufacture队列的绑定 curl -u 用户名:密码 -X DELETE "http://localhost:15672/api/bindings/%2F/e/%2F/q/topic_task_worker_manufacture/topic_task_worker_manufacture"
路径说明:/api/bindings/{vhost}/e/{source_exchange}/q/{destination_queue}/{routing_key},其中%2F是/的URL编码,空名称的交换机直接用%2F后的空值表示。
内容的提问来源于stack exchange,提问作者欧阳维杰
相关产品推荐
相关产品推荐

