Exchange2000中的死信的自动删除

本文介绍了一个名为badmailadmin.exe的工具,该工具可通过执行脚本文件自动清理邮件系统的死信。下载链接为http://support.microsoft.com/kb/867642/zh-cn,下载后需通过任务计划程序设置定期执行。

badmailadmin.exe   可以自动删除死信

下载链接地址: http://support.microsoft.com/kb/867642/zh-cn

下载后是个执行文件badmailadmin.exe  。解压后生成一个名为badmailadmin的文件夹。里面有三个文件。

主要是一个脚本文件:badmailadmin.wsf  . 其余两个是帮助文件。

新增任务计划 执行程序: "   c:/windows/system32/cscript.exe   c:/ badmailadmin.wsf  "

 

MQ延迟队列死信在消息队列系统中有着紧密的联系,以下是相关内容: ### 死信的定义与产生条件 死信是指满足一定条件而无法被消费者正确处理的消息。这些条件包括消息被拒绝、消息过期、消息达到最大重试次数等。在RabbitMQ中,一个消息在满足如下条件下会变为死信:消息被消费者拒收,且`reject`方法的参数里`requeue`为`false`,即不会被再次放到队列里供其他消费者使用;消息的TTL(Time-To-Live,生存时间)到了,消息过期;队列的长度限制满了,排在前面的消息会被丢弃或者扔到死信路由上 [^1][^2]。 ### 死信队列死信路由 RabbitMQ的死信队列(Dead Letter Queue,DLQ)是一种特殊的队列,用于接收其他队列中的死信消息。而死信路由(Dead Letter exchanges)其实就是一种普通的`exchange`,和创建其他`exchange`没什么区别。只是在某一个设置了Dead Letter Exchange队列中有消息过期时,会自动触发消息的转发,将消息发送到Dead Letter Exchange中去,一个死信路由可以对应多个队列 [^1][^2]。 ### 延迟队列的实现原理 发送带有TTL过期属性的消息,到达过期时间之后,投递到死信队列,以此实现延迟队列的功能。通过控制消息在一段时间后变成死信,又控制变成死信的消息被路由到某一个指定的交换机,结合二者,就能实现一个延迟队列。例如在未付款订单处理场景中,超过一定时间后,系统可利用延迟队列自动取消订单并释放占有物品,即解库存 [^2][^3]。 ### 延迟TTL队列的重要属性 延迟TTL队列有几个重要属性,`x-message-ttl`表示延迟时间;`x-dead-letter-exchange`表示绑定的死信交换机;`x-dead-letter-routing-key`表示绑定的路由,一般是对应死信队列名称 [^4]。 ### 延迟队列实现的问题 当消息过期时,不会立马从队列中抹除。因为每条消息是否过期是在即将投递到消费者之前判断的,RabbitMQ是等消息到达队列顶部即将被消费时,才会判断其是否过期并删除。所以即使消息过期,也不会马上从队列中抹除 [^3]。 ### 应用场景与解决方案 在一些需要定时任务的场景,如未付款订单处理,传统的`springDe schedule`定时任务轮询数据库的方案存在增加系统消耗、增加数据库压力、存在较大时间差等缺点。而RabbitMQ的消息TTL和死信队列`Exchange`结合的方案可以较好地解决这些问题 [^2]。 ### 代码示例 以下是一个简单的Python示例,使用`pika`库来演示如何设置带有TTL和死信队列的消息: ```python import pika import time # 连接到RabbitMQ服务器 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 声明死信交换机和死信队列 channel.exchange_declare(exchange='dlx_exchange', exchange_type='direct') channel.queue_declare(queue='dlq_queue') channel.queue_bind(queue='dlq_queue', exchange='dlx_exchange', routing_key='dlq_routing_key') # 声明普通队列,并设置死信交换机和TTL arguments = { 'x-dead-letter-exchange': 'dlx_exchange', 'x-dead-letter-routing-key': 'dlq_routing_key', 'x-message-ttl': 5000 # 5秒的TTL } channel.queue_declare(queue='normal_queue', arguments=arguments) # 发送消息到普通队列 channel.basic_publish(exchange='', routing_key='normal_queue', body='Delayed message') print(" [x] Sent 'Delayed message'") # 模拟消费死信队列的消息 def callback(ch, method, properties, body): print(" [x] Received %r" % body) channel.basic_consume(queue='dlq_queue', on_message_callback=callback, auto_ack=True) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值