Skip to main content
 首页 » 编程设计

rabbitmq之为 RabbitMQ ack 消息设置较长的超时

2024年04月30日248xxx_UU

我想知道这是否可能。我想从队列中提取一个任务,并进行一些工作,这些工作可能需要 3 秒或更长(可能)分钟的时间才能将 ack 发送回 RabbitMQ 通知工作已完成。该工作由用户完成,因此这就是处理作业所需时间各不相同的原因。

我不想在弹出队列后立即确认消息,因为我希望如果没有收到确认,消息将重新排队。谁能告诉我如何解决我的问题?

请您参考如下方法:

有一个很长的超时时间应该没问题,当然,正如您所说,如果出现问题,您希望重新交付,因此您只想确认> 完成后

实现这一目标的最佳方法,IMO,是在队列上有多个消费者(即多个线程/进程从同一队列消费)。只要队列内容没有特定的排序约束(即,如果队列包含表示涉及 FK 约束的 Postgres 数据的内容,可能会出现这种情况),那就应该没问题。

RabbitMQ 网站上的本教程提供了更多信息(Python 链接,但其他语言应该有类似的教程):https://www.rabbitmq.com/tutorials/tutorial-two-python.html

编辑以回应OP的评论:

您的心跳设置为多少?如果你的worker在设定的时间内没有确认心跳,服务器将认为连接已断开。

不确定您使用的是哪种语言,但对于 Java,您可以使用 setRequestedHeartbeat 方法来指定心跳。

在您实现工作线程的方式中,至关重要的是心跳仍然可以发送回 RabbitMQ 服务器。如果有什么原因阻止客户端发送心跳,服务器将在时间间隔到期后终止连接。