使用Spring和Spring amqp作为我的消息应用程序。我的问题是:
First Problem:我只想请求我的消息5次,如果发生业务异常,消息就应该从队列中释放出来(这里我只关注业务异常)。
第二个问题:如果第一个用例是可能的,我们可以在尝试的基础上以某种方式增加请求的时间吗?假设在第一次尝试中发生业务异常,它应该立即请求,但是在第二次尝试中,应该在2分钟之后,然后4分钟,然后6分钟,然后8分钟,然后10分钟,时间将根据尝试增加。
谢谢
发布于 2017-01-08 15:04:55
对于简单的情况(尝试之间的固定延迟),您可以配置队列以发送已拒绝的消息(一个死信交换),并抛出AmqpRejectAndDontRequeueException。
将队列绑定到死信交换,并在该队列上设置存活时间(ttl),并将其配置为原始队列绑定到的死信交换。该消息将在TTL过期后重新请求。
您需要检查x-death头,以确定消息在循环中遍历了多少次。重试用完后,抛出一个ImmediateAcknowledgeAmqpException以丢弃该消息。
对于可变延迟,您必须自己重新发布消息,到延迟消息交换(有一个代理插件),每次重试的延迟都会增加。
也见this answer。
https://stackoverflow.com/questions/41524419
复制相似问题