摘要:网页删除想要删除队列中的消息,是可以通过的网页来操作的。但是这种方式存在一个问题,就是当消息多的时候点击,页面会卡死。在节点恢复正常之前,持久化队列将不可用。所以这次我想要先清除指定队列的消息即可。网上搜了一下版本的消息。
前因
在公司最新的项目上,由我们技术总监搭了一套框架,其中有使用RabbitMq来监听监听写事件,这也是我第一次使用RabbitMq。因为在开发的过程中,有些事件会因为代码的不完善消费失败,然后就会一直消费,然后一直报错。当bug修复,把正确的代码上传到开发环境,原先遗留的问题消息任然存在,并且会阻塞队列,让之后的正常的消息无法让系统正常的消费。
网页删除想要删除队列中的消息,是可以通过RabbitMq的网页来操作的。登录上RabbitMQ Management之后,在 Queues 中打开指定的队列:
然后在下方的 Delete / purge 中点击 Delete 或者是 purge 都可以达到效果。
但是这种方式存在一个问题,就是当消息多的时候点击,页面会卡死。即使没有卡死也会出现如下对话框:
大概意思是找不到这个持久队列,主节点已经关闭或者是无法访问。
现在只是小白阶段,然后有点搞不懂,网上也没有搜索到什么有用的答案。只找到一句话,来自:https://blog.csdn.net/u011973...
如果队列的主节点不可用,则非镜像队列的行为取决于其持久性。在节点恢复正常之前,持久化队列将不可用。在集群中其他节点上对主节点不可用的持久化队列进行任何操作都将失败
没有深究
重置RabbitMQ然后我就去网上百度了一下,如何使用命令操作,然后找到了下面的解决方法:
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app
执行了一次之后确实是有效的。重启的RabbitMq,然后里面的消息也确实清空了。
然后我当上述的情况再次发生,需要清空消息,这样个时候我不想用这样一看就很粗暴的方式来操作,而且这种方式不仅会清空消息,还会清空所有配置信息。所以这次我想要先清除指定队列的消息即可。
删除指定的队列然后我找到了这个方法:
sudo rabbitmqctl purge_queue ${queue_name} 或 rabbitmqctl purge_queue ${queue_name} 或 rabbitmqctl -p ${vhostpath} purge_queue ${queue_name}
执行报错,说是找不到这个命令,给出的信息如下:
Error: could not recognise command Usage: rabbitmqctl [-n] [-q] [ ] Options: -n node -q Default node is "rabbit@server", where server is the local host. On a host named "server.example.com", the node name of the RabbitMQ Erlang node will usually be rabbit@server (unless RABBITMQ_NODENAME has been set to some non-default value at broker startup time). The output of hostname -s is usually the correct suffix to use after the "@" sign. See rabbitmq-server(1) for details of configuring the RabbitMQ broker. Quiet output mode is selected with the "-q" flag. Informational messages are suppressed when quiet mode is in effect. Commands: stop [ ] stop_app start_app wait reset force_reset rotate_logs join_cluster [--ram] cluster_status change_cluster_node_type disc | ram forget_cluster_node [--offline] update_cluster_nodes clusternode sync_queue queue cancel_sync_queue queue set_cluster_name name add_user delete_user change_password clear_password set_user_tags ... list_users add_vhost delete_vhost list_vhosts [ ...] set_permissions [-p ] clear_permissions [-p ] list_permissions [-p ] list_user_permissions set_parameter [-p ] clear_parameter [-p ] list_parameters [-p ] set_policy [-p ] [--priority ] [--apply-to ] clear_policy [-p ] list_policies [-p ] list_queues [-p ] [ ...] list_exchanges [-p ] [ ...] list_bindings [-p ] [ ...] list_connections [ ...] list_channels [ ...] list_consumers [-p ] status environment report eval close_connection trace_on [-p ] trace_off [-p ] set_vm_memory_high_watermark must be a member of the list [name, tracing]. The list_queues, list_exchanges and list_bindings commands accept an optional virtual host parameter for which to display results. The default value is "/". must be a member of the list [name, durable, auto_delete, arguments, policy, pid, owner_pid, exclusive_consumer_pid, exclusive_consumer_tag, messages_ready, messages_unacknowledged, messages, consumers, consumer_utilisation, memory, slave_pids, synchronised_slave_pids, status]. must be a member of the list [name, type, durable, auto_delete, internal, arguments, policy]. must be a member of the list [source_name, source_kind, destination_name, destination_kind, routing_key, arguments]. must be a member of the list [pid, name, port, host, peer_port, peer_host, ssl, ssl_protocol, ssl_key_exchange, ssl_cipher, ssl_hash, peer_cert_subject, peer_cert_issuer, peer_cert_validity, state, channels, protocol, auth_mechanism, user, vhost, timeout, frame_max, channel_max, client_properties, recv_oct, recv_cnt, send_oct, send_cnt, send_pend]. must be a member of the list [pid, connection, name, number, user, vhost, transactional, confirm, consumer_count, messages_unacknowledged, messages_uncommitted, acks_uncommitted, messages_unconfirmed, prefetch_count, global_prefetch_count].
实际上使用 rabbitmqctl -help 就能得到这些内容。
可以看的出来,这里面已经 rabbitmqctl 所支持的命令都列了出来。其中并没有 purge_queue 这个命令。不知道是不是版本问题还是怎么回事。
rabbitmqadmin然后在这里找到了 rabbitmqadmin 这个东西。官网地址:https://www.rabbitmq.com/mana... 。在上面看到了这么一行文字
Alternatively, you can download the version of rabbitmqadmin which corresponds with the management plugin version 3.7.17 from GitHub.
打开GitHub的链接:https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.7.17/bin/rabbitmqadmin 里面好像是 rabbitmqadmin 的代码。看了一下路径,v3.7.17。这个应该是要对应自己版本的。
rabbitmqctl status
查看版本:
[root@iZuf635fwy8k6ubk6r9yonZ ~]# rabbitmqctl status Status of node rabbit@iZuf635fwy8k6ubk6r9yonZ ... [{pid,3261}, {running_applications, [{rabbitmq_management,"RabbitMQ Management Console","3.3.5"}, {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.3.5"}, {webmachine,"webmachine","1.10.3-rmq3.3.5-gite9359c7"}, {mochiweb,"MochiMedia Web Server","2.7.0-rmq3.3.5-git680dba8"}, {rabbitmq_management_agent,"RabbitMQ Management Agent","3.3.5"}, {rabbit,"RabbitMQ","3.3.5"}, {mnesia,"MNESIA CXC 138 12","4.11"}, {os_mon,"CPO CXC 138 46","2.2.14"}, {amqp_client,"RabbitMQ AMQP Client","3.3.5"}, {inets,"INETS CXC 138 49","5.9.8"}, {xmerl,"XML parser","1.3.6"}, {sasl,"SASL CXC 138 11","2.3.4"}, {stdlib,"ERTS CXC 138 10","1.19.4"}, {kernel,"ERTS CXC 138 10","2.16.4"}]}, {os,{unix,linux}}, {erlang_version, "Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:30] [hipe] [kernel-poll:true] "}, {memory, [{total,44920360}, {connection_procs,944512}, {queue_procs,911352}, {plugins,406328}, {other_proc,13412192}, {mnesia,200144}, {mgmt_db,391944}, {msg_index,95648}, {other_ets,1174432}, {binary,2676288}, {code,20229484}, {atom,711569}, {other_system,3766467}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,1654662758}, {disk_free_limit,50000000}, {disk_free,16424939520}, {file_descriptors, [{total_limit,924},{total_used,9},{sockets_limit,829},{sockets_used,2}]}, {processes,[{limit,1048576},{used,396}]}, {run_queue,0}, {uptime,3716267}] ...done.
结果发现自己的版本竟然是3.3.5。修改路径https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.7.17/bin/rabbitmqadmin 为https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.3.5/bin/rabbitmqadmin,访问,显示并没有这个页面。大概是版本太老了。网上搜了一下3.3.5版本的消息。发现这个版本大概是2014年左右的东西,时至今日已经五年过去了,也太老了吧。
本文章一次没有写完,在我写的过程中,项目提交给测试进行部分测试,然后同事在test环境也安装了一个RabbitMq。我登上去看了一下,嗯,是有 purge_queue 这个命令的。看了一下test的版本,3.6.8。果然还是版本问题。我之前一直操作的是dev服务器的东西,虽然本地也有安装但是在本地进行简单的时候还是很好处理的,注释掉代码,然后重新运行,消费掉垃圾消息即可。
至于 rabbitmqadmin ,官网上有这么一段话:
Obtaining rabbitmqadmin
With the management plugin installed, browse to http://{hostname}:15672/cli/rabbitmqadmin to download. The tool supports
大概意思就可以通过访问 http://{hostname}:15672/cli/rabbitmqadmin 来下载 rabbitmqadmin 。没有深入研究。到此为止,后续可能会更新相关内容。
发布文章的时候发现,过长的思否对过长的url省略的后面的部分,就像是这样:https://raw.githubusercontent...
。所以在上面就对url稍微处理了一下。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75972.html
摘要:初步分析提升可从两方面入手,一个是增加并发数,其二是减少平均响应时间。大部分的时间花在系统与数据库的交互上,到这,便有了一个优化的主题思路最大限度的降低平均响应时间。不要轻易否定一项公认的技术真理,要拿数据说话。 本文最早发表于个人博客:PylixmWiki 应项目的需求,我们使用tornado开发了一个api系统,系统开发完后,在8核16G的虚机上经过压测qps只有200+。与我们当...
摘要:本文基于的插件,针对进行简单的测试。包括协议的介绍,的安装配置开启插件及基于进行的测试。协议是基于发布订阅模型的物联网消息传递协议。对传输消息有三种服务质量最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层网络。 ...
摘要:尽可能地将数据写入,例如创建设置的都会将数据立即的写入再来看看文档怎么描述的看看这可爱的默认值我们终于知道了当我们不做任何设置时,默认采用的是方式显而易见,使用方式能最大限度的减少与的交互,而在大多数场景下都是没有问题的。 0.问题背景 此次问题源于一次挺严重的生产事故:客户的订单被重复生成了,而出问题的代码其实很简单: // .... redisLockUtil.lock(membe...
阅读 1701·2021-11-11 11:02
阅读 1661·2021-09-22 15:55
阅读 2418·2021-09-22 15:18
阅读 3463·2019-08-29 11:26
阅读 3725·2019-08-26 13:43
阅读 2601·2019-08-26 13:32
阅读 864·2019-08-26 10:55
阅读 933·2019-08-26 10:27